单例模式
【一】什么是设计模式?
- 解决问题的模板,大牛们会遇到各种各样的问题,长久一来就形成了一套相对规范的解决办法。
【二】使用模式的好处?
- 设计模式可以帮助开发人员编写高质量、可重用和易于维护的代码。
- 通过使用设计模式,开发人员可以避免重复劳动,并确保他们的代码遵循最佳实践和行业标准。
【三】设计模式的组成部分
- 问题:有了问题才需要想解决办法。
- 解决方案:对上述问题拟定方案解决。
- 关键角色:到底应该用在哪里?谁来用我?
【四】常见的设计模式
-
常见的设计模式有单例模式、工厂模式、观察者模式、适配器模式、策略模式、装饰器模式、代理模式等。
-
一般的设计模式的书籍里面的代码都是 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