美文网首页
创建型设计模式 - 单例模式

创建型设计模式 - 单例模式

作者: 千反田爱瑠爱好者 | 来源:发表于2018-09-09 15:05 被阅读2次
    1. 保证类仅有一个实例,并提供访问它的全局访问点;
    2. 唯一实例通过子类化可扩展;
    3. 用户无需更改代码即可使用该扩展实例;
    4. 由于不需要在每次调用都创建一个对象,可以节省内存以及动态产生销毁对象的开销。

    实现1:基于继承

    class Singleton(object):
        def __new__(cls, *args, **kwargs):
            if not hasattr(cls, '_instance'):
                orig = super(Singleton, cls)
                cls._instance = orig.__new__(cls, *args, *kwargs)
            return cls._instance
    
    class MyClass(Singleton):
        pass
    
    • 对类进行实例化时会调用构造方法__new__,此时判断是否存在成员变量_instance(单例):
      • _instance不存在,则创建类的实例、绑定到_instance上并返回;
      • _instance存在,则直接返回。

    实现2:基于装饰器

    def Singleton(cls):
        instances = {}
        def _singleton(*args, **kwargs):
            if cls not in instances:
                instances[cls] = cls(*args, **kwargs)
            return instances[cls]
        return _singleton
    
    @Singleton
    class MyClass:
        pass
    

    原理与实现1类似,改由instances存放单例。

    相关文章

      网友评论

          本文标题:创建型设计模式 - 单例模式

          本文链接:https://www.haomeiwen.com/subject/hwtdgftx.html