Posted on 2008-03-01 22:01 
Wang Jinbo 阅读(2154) 
评论(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来生成对象了。所以说虽然将类的构造函数私有化了,但构造函数本身还是有意义的,它会在构建第一个,也是唯一一个实例的时候执行。同时,保证了不会出现多于一个的实例。