创建型模式 Singleton模式(单体模式)
一. 意图
保证一个类仅有一个实例, 并提供一个访问它的全局访问点.
二. 适用性
1. 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时.
2. 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时.
三. 模式结构
图1
四. 角色说明
Singleton: 提供一个静态方法返回对象指针.
五. 代码
class Singleton
{
public:
static Singleton* Instance();
protected:
Singleton();
privete:
static Singleton* m_pInstance;
};
Singleton* Singleton::m_pInstance = 0;
Singleton* Singleton::Instance()
{
if(m_pInstance)
{
m_pInstance = new Singleton;
}
return m_pInstance;
}
Singleton::Singleton()
{}
六. 说明
1 对唯一实例的受控访问..
2. 不一定是唯一实例, 你也可以设计成只允许两个实例, 三个实例等等.
七. 我的理解
7.1 很简单, 就是控制好整个空间中唯一的对象实例. 通过私有的构造方法和静态的创建实例实现. 你使用全局变量办法也是可行的, 但是容易出错.
7.2 在一个程序中控制某一个硬件, 通常指能创建该硬件的一个实例, 此时可以使用Singleton模式.
7.3 通常对创建的实例还需要一个删除函数, 这里也可以和Instance函数一样, 定义为静态类函数, 例如ReInstance.
八. 相关模式
8.1 很多模式可以使用Singleton模式实现. 参见Abstract Factory, Builder和Prototype, 模式中的某些类可以使用其他模式来创建