Posted on 2008-03-01 22:01
Wang Jinbo 阅读(2106)
评论(5) 编辑 收藏 引用 所属分类:
设计模式
对于某些用途的类,必须确保在程序运行过程中最多只有一个实例。单件模式很适合这种场合。
单件模式实现的技巧是将构造函数私有化,这样就禁止了直接定义对象变量和用new生成对象。但将构造函数设为私有的话,又如何去生成那个唯一的对象呢?废话少说,先贴代码。
class Singleton{
private:
Singleton(){
// more code
}
static Singleton *thisInstance;
// more code
public:
static Singleton *getInstance();
// more code
};
Singleton *Singleton::thisInstance=NULL;
Singleton *Singleton::getInstance(){
if (thisInstance==NULL)
thisInstance=new Singleton();
return thisInstance;
}
如此一来,要取得Singleton的实例,只能用getInstance函数。getInstance函数必须是静态(Static)的,这样才能在还没有实例的时候使用这个函数。而getInstance又是Singleton类里的函数,当然是可以在其中使用new来生成对象了。所以说虽然将类的构造函数私有化了,但构造函数本身还是有意义的,它会在构建第一个,也是唯一一个实例的时候执行。同时,保证了不会出现多于一个的实例。