通过装饰器实现单例模式,只要任意一个类使用该装饰器装饰,那么就会变成一个单例模式的类

# 方法一:
def single(cls):
    cls.instance = None

    def wrapper(*args, **kwargs):
        # 判断类是否有instance属性
        if not cls.instance:
            # 通过类创建对象,并保存为instance属性
            cls.instance = cls(*args, **kwargs)
        # 返回对象
        return cls.instance

    return wrapper


@single  # A = single(A)
class A:
    pass


@single
class B:
    pass


a1 = A()
a2 = A()
b1 = B()
b2 = B()
print(a1, a2)
print(b1, b2)
# 方法二:通过类装饰器
class Single:
    def __init__(self, cls):
        self.cls = cls
        self.cls.instance = None

    def __call__(self, *args, **kwargs):
        if not self.cls.instance:
            self.cls.instance = self.cls(*args, **kwargs)
        return self.cls.instance


@Single  # A = Single(A)
class A:
    pass


@Single
class B:
    pass


a1 = A()
a2 = A()
b1 = B()
b2 = B()
print(a1, a2)
print(b1, b2)

你可能感兴趣的:(试题练习,单例模式,python,开发语言)