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

面向对象进阶-单例模式

作者: 测试探索 | 来源:发表于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

相关文章

  • 单例模式

    面向对象设计的设计模式(四):单例模式

  • js 面向对象编程 - 单例模式

    // 面向对象编程(Object Oriented Programming) /* * 单例设计模式(Single...

  • 单例模式

    1. 单例模式 在面向对象的程序设计中, 单例模式是最简单的设计模式,这种类型的设计模式属于创建型模型,所谓单例....

  • Singleton 单例模式

    搬运自大神博客单例模式(Singleton)及其C++实现 单例模式,在GOF的《设计模式:可复用面向对象软件的基...

  • 单例模式

    这几天在看PHP面向对象,设计模式与实现这本书。谈谈对单例模式的理解。 单例模式:在系统中需要一个对象来存储数据,...

  • 单例模式

    一、单例模式介绍 单例模式简而言之就是只有一个实例化对象的类,初学者可以通过单例 模式的设计更好的理解面向...

  • 单例模式(Go)

    单例模式是23种面向对象的设计模式之一。在实际应用中,涉及到配置或资源管理的对象,都应该考虑单例模式。广义上讲,只...

  • 单例模式(python)

    单例模式是23种面向对象的设计模式之一。在实际应用中,涉及到配置或资源管理的对象,都应该考虑单例模式。广义上讲,只...

  • ES6快速入门(三)

    1. 面向对象 a) 单例模式(单体模式) b) 工厂模式 es5的面向对象工厂模式: 首先让我们一起来回一下es...

  • 008-面向对象(模式)& 异常

    工厂模式(面向对象封装练习) 概念 用法 非工厂模式: 工厂模式: new方法(单例模式就会用到重写new方法) ...

网友评论

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

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