您的位置:首页 > 其它

设计模式之单件模式

2006-05-17 20:39 183 查看
呵呵,我又要开始讲设计模式了,虽然C++学得不是太好,面向对象也不太清楚,但是我可感觉得到设计模式的魅力,我写程序很多的时候是凭着感觉,虽然也有总体的框架,但是总觉得写出来的程序,就是小作坊里手工艺品,没有什么出彩的地方。而当我刚接触到一点设计模式的概念时,我觉得整个程序的架构很清楚,写出来的程序,真的可以说是一件艺术品,我可以经常把源码拿出来,一个类,一个类地看,边看边想着其中的每一个细节,那种感觉就是在欣赏。呵呵,有点夸张了!下面我们开始今天的主题,单件模式。

有很多时候我们的程序可能需要一个类,来维护一些全局性的信息,也可以这样说,这样一个类,在我们程序的整个生命期内只可能有一个实例,因此,我们会自然而然的想到Static,我也是这样想的,但是当你看到下面这个类时,看看你会有什么问题?

class Singleton
{
public:
static Singleton * Instance( void );
protected:
Singleton();
private:
static Singleton * _instance;
}

//implement
Singleton * Singleton::_instance = 0;
Singleton * Singleton::Instance( )
{
if( _instance == 0 )
{
_instance = new Singleton();
}
return _instance;
}
/////
可能大家看得出来,为什么构函数是protected的,多一个Instance是干什么的?
呵呵,这里我只讲一个原理吧,也是我看来的,Instance 使用惰性初始化,它的返回值直到第一次访问时才被创建和保存。而正因为构造函数是保护的,所以,其它任何试图直接实例化Singleton类的客户将得到一个编译时的错误信息。我们可想一下,也就是说我的这个类,只可以通过访问静态成员函数Instance()来构建和初始化,我们可以把这个函数当成一个接口,所有想NEW我这个类的人,都必须通过我,有点像现在的经纪人,呵呵,有什么事找他,由于全全负责_instance在哪里出场(实例化),这样的话,这个经纪人具有很大的权限,我们就可以在这里保存这个类只被实例化一次。(里面有一个判断),这样做的好处是什么呢?我正在研究,呵呵,以后会发上来!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: