什么叫单例模式
单例模式(Singleton Pattern)是非常简单的策略模式之一。这类种类的策略模式归属于创建型方式 ,它出示了一种创建对象的最好方法 。
这类方式牵涉到一个单一的类,此类承担创建自身的对象,另外保证仅有单独对象被创建。这一类出示了一种浏览其唯一的对象的方法 ,能够 立即浏览 ,不用实例化此类的对象。
留意:
1、单例类只有有一个实例 。
2 、单例类务必自身创建自身的唯一实例 。
3、单例类务必给全部别的对象出示这一实例。
应用情景:
1、规定生产制造唯一系列号。
2 、WEB 中的电子计数器,无需每一次更新都会数据库查询中放一次,用单例先缓存文件起來 。
3 、创建的一个对象必须耗费的資源过多 ,例如 I/O 与数据库查询的联接等。
编码完成
1 应用__new__方式
__new__()
在__init__()
以前被启用,用以转化成实例对象。运用这一方式和类的属性的特性能够 完成策略模式的单例模式 。
对这方面不了解的,能够 查询我之前发的文章内容:
Python类中的__new__和__init__的差别
class Singleton(object):
def __new__(cls, *args, **kw):
if not hasattr(cls, '_instance'):
orig = super(Singleton, cls)
cls._instance = orig.__new__(cls, *args, **kw)
return cls._instance
class MyClass(Singleton):
a = 1
2 共享资源属性
创建实例时把全部实例的__dict__偏向同一个词典,那样他们具备同样的属性和方式.
class Borg(object):
_state = {}
def __new__(cls, *args, **kw):
ob = super(Borg, cls).__new__(cls, *args, **kw)
ob.__dict__ = cls._state
return ob
class MyClass2(Borg):
a = 1
3 装饰器版本号
def singleton(cls):
instances = {}
def getinstance(*args, **kw):
if cls not in instances:
instances[cls] = cls(*args, **kw)
return instances[cls]
return getinstance
@singleton
class MyClass:
...
4 import方式
做为python的控制模块是纯天然的单例模式
mysingleton.py
class My_Singleton(object):
def foo(self):
pass
my_singleton = My_Singleton()
# to use
from mysingleton import my_singleton
my_singleton.foo()
认证一下
我们可以见到类对象和运行内存id()是一样的。
参照文本文档
- https://www.runoob.com/design-pattern/singleton-pattern.html
文章来源于网络 ,如有侵权请联系站长QQ61910465删除本文版权归qu快排seo www.sEoguRuBlog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ√61910465文中先发于BigYoung华明镇