设计模式之单例模式

发布时间 2024-01-12 17:12:59作者: ssrheart

单例模式

【一】什么是设计模式?

  • 解决问题的模板,大牛们会遇到各种各样的问题,长久一来就形成了一套相对规范的解决办法。

【二】使用模式的好处?

  • 设计模式可以帮助开发人员编写高质量、可重用和易于维护的代码。
  • 通过使用设计模式,开发人员可以避免重复劳动,并确保他们的代码遵循最佳实践和行业标准。

【三】设计模式的组成部分

  • 问题:有了问题才需要想解决办法。
  • 解决方案:对上述问题拟定方案解决。
  • 关键角色:到底应该用在哪里?谁来用我?

【四】常见的设计模式

  • 常见的设计模式有单例模式、工厂模式、观察者模式、适配器模式、策略模式、装饰器模式、代理模式等。

  • 一般的设计模式的书籍里面的代码都是 Java 写的。

(1)什么是单例模式

  • 单例设计模式(Singleton Design Pattern): 一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。

  • 当一个类的功能比较单一,只需要一个实例对象就可以完成需求时,就可以使用单例模式来节省内存资源。

class Student():
    ...


s = Student()
s1 = Student()

print(id(s))  # 2227903254528
print(id(s1))  # 2227903251120
  • 一个人创建一个对象会占用一块内存地址,一百个人创建会占用一百块内存地址,所以我们要创建单例模式来节省资源。

(2)元类创建单例模式

  • 在这段代码中,instance 是一个类变量,它被添加到类 cls 中。这个类变量用于保存类的唯一实例,通常用于实现单例模式。
  • 具体来说,这个代码片段定义了一个元类 MyMeta,它继承自内置的元类 type。在元类的 __init__ 方法中,添加了一个类变量 instance 到被创建的类 cls 中。这样,当使用这个元类创建一个类时,该类就会具有一个名为 instance 的类变量。
  • 可以使用这个 instance 类变量来存储并获取类的实例。通常,这种实现方式用于创建单例类的实例,确保在整个应用程序中只有一个类的实例存在。
class MyMeta(type):
    def __init__(cls, what, bases=None, dict=None):
        '''
        # 在这段代码中,instance 是一个类变量,它被添加到类 cls 中。
        这个类变量用于保存类的唯一实例,通常用于实现单例模式。
        '''
        cls.instance = None
        super().__init__(cls, what=what, bases=bases, dict=dict)


def School(metaclass=MyMeta):
    ...


s = School()
s1 = School()
print(id(s))  # 140708064602104
print(id(s1))  # 140708064602104