什么是单例设计模式?
单例:单个对象/实例
程序在运行过程中,确保一个类只能创建一个对象,之后不管在程序的哪个地方获取该类的对象,获取到的都是同一个对象
使用场景:商品仓库等,import导入模块就是一个单例设计模式,每个模块只能被导入一次
使用类属性实现单例设计模式
# 类属性实现单例设计模式
class A(object):
# 定义类属性
__instance = None
# 重写构造函数__new__
def __new__(cls, *args, **kwargs):
# 第一次创建对象
if cls.__instance is None:
cls.__instance = super().__new__(cls)
# 之后每次返回第一次创建的对象
return cls.__instance
a1 = A()
a2 = A()
print(a1 is a2)
True
使用装饰器实现单例设计模式
# 定义装饰器
def singleton(cls):
# 定义局部变量表示对象,默认为None
instance = None
def inner(*args, **kwargs):
nonlocal instance
# 判断对象是否存在,不存在则创建对象
if instance is None:
instance = cls(*args, **kwargs)
# 存在就返回该对象
return instance
return inner
True