1、意图
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
2、工作原理
用一个特殊方法来实例化所需的对象。其中最关键的就是这个方法:调用这个方法时,检查对象是否已经实例化。如果已经实例化,该方法仅返回对该对象的一个引用。如果尚未实例化,该方法实例化该对象并返回对此新实例的一个引用。为了确保这是实例化此类型对象的唯一方法,将这个这个类的构造函数定义为保护或者私有的。
3、问题
几个不同的客户对象需要引用同一对象,而且希望确保这种类型的对象数目不超过一个。
4、解决方案
保证一个实例。
5、通用结构
6、参与者
Singleton:定义一个Instance操作,允许客户访问它的唯一实例。
7、协作
Client对象只能通过Instance方法创建Singleton实例。
8、效果
Client对象无需操心是否已存在Singleton实例,这是由Singleton自己控制的。
9、实现
- 添加一个类的私有的静态成员变量,引用所需的对象(初值为null)。
- 添加一个公共静态方法,它在成员变量的值为null时实例化这个类(并设置成员变量的值),然后返回该成员变量的值。
- 将构造函数的状态设置为保护或者私有,从而防止任何人直接实例化这个类。