1 意图
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
2 动机
对·一些类来说,只有一个实例是很重要的。虽然系统中可以由许多打印机,但却只应该有一个打印假脱机,只应该有一个文件系统和窗口管理器。一个数字滤波器只能有一个A/D转换器。
让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可
以被创建(通过截取创建新对象的请求),并且它可以提供一个访问该实例的方法。这就是Singleton模式。
3 适用性
在下面的情况下可以使用Singleton模式
- 当类只能有一个实例并且客户可以从任何一个访问点访问它时;
- 当这个唯一实例应该是通过子类化可扩展的,并且可以应该无需更改代码就能使用一个扩展的实例时。
4 结构
5 参与者
SingleTon——定义一个Instance操作,运行客户访问它的唯一实例
6 协作
客户只能通过Singleton的Instance操作访问一个singleton的实例
7 效果
Singleton优点:
- 1 对唯一实例的受控访问;
- 2 缩小名空间
- 3 允许对操作和表示的精化:Singleton类可以有子类,而且用这个扩展类的实例来配置一个应用是很容易的。你可以用你所需要的类的实例在运行时刻配置应用。
- 4 允许可变数目的实例
- 5 比类操作更灵活
8 实现
下面是使用Singleton模式需要考虑的问题:
- 1 保证唯一一个实例;
- 2 创建Singleton类的子类