posts - 5, comments - 40, trackbacks - 0, articles - 0

单件模式的实现

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来生成对象了。所以说虽然将类的构造函数私有化了,但构造函数本身还是有意义的,它会在构建第一个,也是唯一一个实例的时候执行。同时,保证了不会出现多于一个的实例。

Feedback

# re: 单件模式的实现  回复  更多评论   

2008-03-02 05:24 by helpsoff.com.cn
离真正可用的singleton实现还早得很呢~~

# re: 单件模式的实现  回复  更多评论   

2008-03-02 21:37 by 蚂蚁终结者
singleton远没有想象的那么简单!

# re: 单件模式的实现  回复  更多评论   

2008-03-03 11:18 by
没有释放内存,没有信号量。。。。。。。。。。。

# re: 单件模式的实现  回复  更多评论   

2008-03-04 00:32 by 逍遥剑客
还有依赖关系的单件之间的初始化顺序问题

# re: 单件模式的实现[未登录]  回复  更多评论   

2008-03-05 09:26 by erran
yun si

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理