SINGLETON(单件)——对象创建型模式

意图:主要是为了保证一个类仅有一个实例,并提供一个访问它的全局访问点。

适用性:

当一个类不知道它所必须创建的对象的类的时候。

当一个类希望由它的子类来指定它所创建的对象的时候。

结构图:

SINGLETON(单件)——对象创建型模式

实现:

1)保证一个唯一的实例

Singleton模式,用C++实现的一个很简单的例子。一台计算机运行中的操作系统理解为类COSSingleton的唯一实例,在系统启动时,只有一个操作系统被创建。做到这一点只需要在COSSingleton类中声明一个类操作(即一个静态成员函数),由它保证只有一个实例被创建。
classCOSSingleton

{

public:

staticCOSSingletonInstance();

virtualvoidShowOSVersion();

protected:

COSSingleton(
void);

private:

staticCOSSingleton
_instance;

};

它包含了一个指向它的唯一实例的指针。注意构造函数的访问控制为protected,这是为了扩展性(子类继承),而又不打破Singleton模式的意图不能创建多个实例。 相应的实现如下:
SINGLETON(单件)——对象创建型模式SINGLETON(单件)——对象创建型模式代码COSSingletonCOSSingleton::_instance=NULL;



voidCOSSingleton::ShowOSVersion()

{

std::cout
<<"Unknow";

}



COSSingleton
COSSingleton::Instance()

{

if(_instance==NULL)

{

_instance
=newCOSSingleton();

}

return_instance;

}

2)创建Singleton类的子类

现在让我们想象,在一个电脑上安装了多个系统,在启动时会提示选择,决定我们进入哪一个系统。事实上,问题就转换为我们要用Singleton的哪一个子类来实例化即将要启动的操作系统。通过参数化子类类型进行选择。重构Instance()函数,代码如下:
SINGLETON(单件)——对象创建型模式SINGLETON(单件)——对象创建型模式代码staticCOSSingletonInstance(intindex);



COSSingleton
COSSingleton::Instance(intindex)

{

if(index==0)

{

returnnewCWinOS();

}

elseif(1==index)

{

returnnewCLinuxOS();

}

else

{

if(_instance==NULL)

{

_instance
=newCOSSingleton();

}

return_instance;

}

}

这样一方面将对象创建延迟到子类进行,一方面保证唯一性。当然这样的实现会随着子类的增多而不堪重负,每次都要修改Instance()函数 。解决办法是使用注册表的方法。事先将子类信息储存或注册,在Instance函数中只进行查找并返回相应的子类实例对象。

原文链接: https://www.cnblogs.com/wxfasdic/archive/2010/06/30/1768709.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/12348

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 上午11:14
下一篇 2023年2月7日 上午11:17

相关推荐