单例模式是一种比较常见的设计模式,所以顺理成章的成为我们第一个介绍的设计模式。 应用场景:
资源共享。例如,数据库连接,配置管理,日志管理。 实现方法有多种:
使用**_new_** class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super().__new__(cls) #这里需要注意不能使用cls(), 否则会导致无限递归
return cls._instance
ins1 = Singleton()
ins2 = Singleton()
id(ins1) == id(ins2) # True
使用闭包/函数装饰器 闭包使得自由变量instance在**_singleton**调用完成后没有被释放,跟上诉方法中的类变量作用一样。