美文网首页
面向对象进阶-单例模式

面向对象进阶-单例模式

作者: 测试探索 | 来源:发表于2022-11-25 17:05 被阅读0次

    类每次实例化的时候都会创建一个新的对象,如果要求类只能被实例化一次,就是单例模式


    image.png
    """
    通过类的__new__方法实现单例模式
    """
    class MyClass():
        __instance = False
    
        def __new__(cls, *args, **kwargs):
            # 判断类是否实例化过对象
            if cls.__instance:
                # 如果有,则直接返回之前的对象
                print("if第一层逻辑:",cls.__instance)
                return cls.__instance
            else:
                # 如果没有则调用父类的方法,进行实例化,并保存
                obj = super().__new__(cls)
                print("obj",obj)
                cls.__instance = obj
                return cls.__instance
    
    a1 = MyClass()
    a2 = MyClass()
    a3 = MyClass()
    print(a1,a2,a3)
    
    
    image.png

    练习题

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

    def single(cls):
        cls.instance = None
        def wrapper(*args, **kwargs):
            if not getattr(cls, 'instance'):
                cls.instance = cls(*args, **kwargs)
    
            return cls.instance
        return wrapper
    
    
    @single  # DemoTest = single(DemoTest)
    class DemoTest:
        pass
    
    
    a1 = DemoTest()
    a2 = DemoTest()
    a3 = DemoTest()
    print(a1, a2, a3)
    
    image.png

    相关文章

      网友评论

          本文标题:面向对象进阶-单例模式

          本文链接:https://www.haomeiwen.com/subject/vnnxfdtx.html