source: study/Programming/Python/basic/单例.md

单例

1 单例设计模式

  • 设计模式
    • 设计模式是前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对某一特定问题的成熟解决方案
    • 使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性
  • 单例设计模式
    • 目的– 让类创建的对象,在系统中只有唯一的一个实例
    • 每一次执行类名()返回的对象,内存地址是相同的

单例设计模式的应用场景

  • 音乐播放对象
  • 回收站对象
  • 打印机对象
  • …….

2 __new__方法

  • 使用类名()创建对象是,Python的解释器首先会调用__new__方法为对象分配空间
  • __new__是一个有object基类提供的内置的静态方法,主要作用有两个:
    • 在内存中为对象分配空间
    • 返回对象的引用
  • Python的解释器获得对象的引用后,将引用作为第一个参数,传递给__init__方法

重写__new__方法的代码非常固定

  • 重写__new__方法一定要return super().__new__(cls)
  • 否则Python的解释器得不到分配空间的对象引用,就不会调用对象的初始化方法
  • 注意: __new__是一个静态方法,在调用时需要主动传递cls参数

3 Python的单例

  • 单例– 让类创建的对象,在系统中只有唯一的一个实例
    1. 定义一个类属性,初始值时None,用于记录单例对象的引用
    2. 重写__new__方法
    3. 如果类属性is None,调用父类方法分配空间,并在属性中记录结果
    4. 返回类属性中记录的对象引用