Python设计模式:单例模式
发布时间:2020-12-20 10:06:35 所属栏目:Python 来源:网络整理
导读:单例设计模式: 单例模式提供这样一个机制,确保类有且只有一个特定类型的对象,并提供全局访问点。一般单例模式使用时,需要注意以下几点: 确保该类有且只有一个对象被创建。 需要为该对象提供一个全局访问点,以便程序可以全局访问该对象(必须保证这个访
单例设计模式:单例模式提供这样一个机制,确保类有且只有一个特定类型的对象,并提供全局访问点。一般单例模式使用时,需要注意以下几点:
单例模式优点:如果在程序中某个对象只需要创建一次,就可以考虑使用单例模式,比如日志操作,数据库操作等,这种对象创建多个就会非常浪费资源,也不能很好的实现这些操作的同步,所以单例模式是一个非常不错的选择。 单例模式缺点:它的缺点也很明显,因为单例是全局变量,所以使用时它可能在某个地方已经被修改了,但是开发人员可能并不知道。而且所有使用到这个单例的类,会因为这个单例成为紧密耦合的关系,从而某个类的改变可能会影响到其他的类。 实现方式:一般有两种方式,一种是使用元类metaclass控制类实例化时的对象,另一种是使用类的__new__方法控制类返回的对象。(关于元类,这里有篇博客讲得很详细:https://www.cnblogs.com/tkqasn/p/6524879.html) ? 元类实现单例模式(Python3.6): 1 class Singleton(type): 2 def __init__(cls,*args,**kwargs): 3 cls.__instance = None 4 super().__init__(*args,1)">kwargs) 5 6 __call__(cls,1)"> 7 if cls.__instance is None: 8 cls.__instance = super().__call__(*args,1)"> 9 10 return cls.__instance 11 12 13 class MySingleton(metaclass=Singleton): 14 __init__(self,val): 15 self.val = val 16 print(self.val) 17 18 19 hello = MySingleton('hello') 20 hi = MySingleton(hi21 print(hello hi) 22 23 ----------输出结果---------- 24 hello 25 True
? __new__实现单例模式(Python3.6): MySingleton: 3 self.val = val
? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |