参考资料:
https://zhuanlan.zhihu.com/p/37534850
什么是单例模式
就是全局作用域内只有一个实例的设计模式。
常见使用场景,比如数据库的连接对象,配置文件中的变量等等。
单例模式的实现
1.使用函数装饰器
# 1. decorator
def singleton(cls):
_instance = {}
def wrap():
if cls not in _instance:
_instance[cls] = cls()
return _instance[cls]
return wrap
@singleton
class A(object):
def __init__(self):
pass
2.使用类装饰器
# 2. class decorator
class Singleton(object):
def __init__(self, cls):
self._cls = cls
self._instance = {}
def __call__(self, *args, **kwargs):
if self._cls not in self._instance:
self._instance[self._cls] = self._cls()
return self._instance[self._cls]
@Singleton
class B():
def __init__(self):
pass
3.使用new方法
class C(object):
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = object.__new__(cls, *args, **kwargs)
return cls._instance
def __init__(self):
pass
网友评论