单件模式的技巧就在于类的构造函数是一个私有的函数。但是类的构造函数又是必须创建的?怎么办呢?那就只有动用static函数了。我们看到static里面调用了构造函数,就是这么简单。
class object
{
public:
static class object* pObject;
static object* create_new_object()
{
if(NULL != pObject)
return pObject;
pObject = new object();
assert(NULL != pObject);
return pObject;
}
private:
object() {}
~object() {}
};
class object* object::pObject = NULL;
int main(int argc, char* argv[])
{
object* pGlobal = object::create_new_object();
return 1;
}
单件模式是用的最多的模式,每一个正式的软件都要用它,全局配置、唯一资源、还有一个就是所有的工厂我都设计为单件模式,因此它的使用量大于工厂模式和抽象工厂模式之和。是用来创建一个需要全局唯一实例的模式。只是需要纠正一点。singleton模式中,构造函数应该是protected.这样子类才可以扩展这个构造函数。
单件模式主要应用在以下场合:
1. 对于一个类,占用的系统资源非常多。而且这些资源可以被全局共享,则可以设计为singleton模式,强迫全局只有一个实例
2. 对于一个类,需要对实例进行计数。可以在createInstance中进行并可以对实例的个数进行限制。
3. 对于一个类,需要对其实例的具体行为进行控制,例如,期望返回的实例实际上是自己子类的实例。这样可以通过Singleton模式,对客户端代码保持透明。