目录

大话设计模式21:单例模式

大话设计模式:21.单例模式

单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点

TL;DR:通过私有化构造方法和私有变量,让类自身负责保存它唯一的实例,这个类保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法

单例模式结构图

1.优点

  1. 保证实例唯一
  2. 实现对唯一实例的受控访问,即可以严格地控制客户怎样访问它,以及何时访问它

2.实现细节

  1. Singleton: 负责创建自己的唯一实例,并定义 GetInstance 操作,允许客户访问它的唯一实例

3.使用场景

  1. 需要实例如果存在,那么有且仅有一个实例存在的情况

4.多线程时的单例

  1. 需要给进程加锁
  2. 但如果每次都要加锁,没有必要且影响访问性能:双重锁定(Double-Check Locking),即先判断实例是否存在,再加锁,获得锁后,再判断实例是否存在,避免重复创建实例

5.饿汉式单例类 vs 懒汉式单例类

  1. 饿汉式:依赖公共语言运行库提供的静态初始化方法来初始化变量,自己被加载时,就将自己实例化,要提前占用系统资源,但不需要开发人员显式编写线程安全代码,即可解决多线程环境下不安全问题
  2. 懒汉式:第一次被引用时,才会将自己实例化,