.Tang

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

单利模式是 软件设计模式

主要目的是确保某一个类只有一个实例存在

1.python的模块就是天然的单例,因为模块在第一次导入时,会生成 一个后缀.pyc 文件,当第二次导入时,就会直接加载 .pyc 文件,而不会再次执行模块代码。因此,我们只需把相关的函数和数据定义在一个模块中,再去导入。导入的对象则为单例

 

2.__new__方法

class SingCase:
    """ 单例 """
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super(SingCase, cls).__new__(cls, *args, **kwargs)
        return cls._instance


class A(SingCase):
    pass
a1 = A()
a2 = A()
a3 = A()  # a1 is a2 is a3

3.装饰器方法

def singLeton(cls):
    _instance = {}
    def _singleton(*args, **kwargs):
        if cls not in _instance: # 传入的类被第一调用时,字典键名 cls 没有在_instance字典里,第一次之后调用就存在了
            _instance[cls] = cls(*args, **kwargs)
        return _instance[cls] # 返回值为cls(*args, **kwargs)

    return _singleton


@singLeton
class A:
    pass

a1 = A()
a2 = A()
a3 = A()
print(a1 is a2 is a3) # True

 

posted on 2018-05-09 10:33  .Tang  阅读(198)  评论(0编辑  收藏  举报