★03.创建型模式 ★05.Singleton(单件)

意图

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

别名

单例类、单例模式

动机

有些系统的类仅能有一个实例,并且希望易于访问。如文件系统,窗口管理器。

适用性

  1. 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
  2. 当这个单例应该通过子类化可扩展为别的单例,并且客户应该无需更改代码就能使用拓展出来的单例时。(参见单件注册表)

结构

★03.创建型模式 ★05.Singleton(单件)_第1张图片

参与者

  1. Singleton:
    • 定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类操作。(即C++中的一个静态成员函数)
    • 可能负责创建它自己的唯一实例。

协作

客户只能通过Singleton的Instance操作访问一个Singleton的实例。

效果

  1. 对唯一实例的受控访问。因为Singleton类封装它的唯一实例,所以它可以严格的控制客户怎样以及何时访问它。
  2. 缩小名称空间。通过将原本需要全局的变量统统放进Singleton类中,可以达到缩小名称空间的目的,避免污染名称空间。
  3. 允许对操作和表示的精化。Singleton类可以有子类,可以通过这个子类的实例来配置一个应用。
  4. 允许可变数目的实例。可以让Singleton类有多个实例,你可以用相同的方法来控制应用所使用的实例的数目。
  5. 比类操作更灵活。Singleton模式相比类操作(即C++中的静态成员函数,类拥有的操作,而不是对象拥有的操作。所有类实例共享一个类操作。)更加灵活。若采用类操作,C++中的静态成员函数不是虚函数,因此子类不能多态的重定义它们。(采用Singleton模式则不会有这种问题。)

实现

  1. 保证一个唯一的实例。
  2. 我们不知道多个单件的调用顺序,所以单件之间不能存在依赖关系。
  3. 创建Singleton类的子类。(参见单件注册表)

你可能感兴趣的:(★03.创建型模式 ★05.Singleton(单件))