什么叫单例模式

单例模式(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()是一样的。

参照文本文档

  1. https://www.runoob.com/design-pattern/singleton-pattern.html

文中先发于BigYoung华明镇

文章来源于网络 ,如有侵权请联系站长QQ61910465删除
本文版权归qu快排seo www.sEoguRuBlog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ√61910465