设计模式入门(1)------------单件(Singleton)

hyqryq hyqryq 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
设计模式入门(1)------------单件(Singleton)

作者的话:
大家都说, C++难 , 难在那里 , 难在他的面向对象OO部分. 而OO的设计, 又是OO的难点
. 设计模式描述了面向对象领域中经常出现的一类固定问题 ,和他比较固定的解决方法. 这样
,你就可以一次次的重用这种解决方法而不必作重复的劳动. 但是经典书籍<<Design Pattern
>>比较晦涩, 想想我自己, 也是花费了许多时间去揣摩书中的含义. 现在精通设计模式的高手
很多, 不过他们大都很忙. 我想, 我可以花去一些休息时间去为我们的众多C++ fans去做一些
有意义的事情. 我的水平不高, 文中必有一些错误, 欢迎高手们的指正.
我是个C++谜, 我经常去www.cuj.com ,在我的文章中, 你也会发现Jim Hyslop and Herb Su
tter 的影子.
我希望把模式以浅显易懂的方式介绍给大家. 如果你觉得这篇文章颇对你的胃口, 或是对你
有一点帮助, hahaha, Its my pleasure. 也对我来一些鼓励吧! 大家的鼓励可是我写作的动
力呦! (^-^)
-------------------------------------------------------------------------
" 喂喂喂, Grant 你在干吗? ", 这个家伙整个上午都把他那只派克笔转过来转过去, 搞得我
心烦不已 . "你可不可以安静点儿 ! ", 我说 .
" 我有个问题无法解决. " Grant 说, " 我设计了一个钟表类, 他需要一个唯一个时钟来对
程序中的其他的一些其他的定时器进行协调. 我不想生成第二个时钟! ", "那么你怎么做的
呢? " 我饶有兴趣的问. "我想使用全局变量, 可是我没有办法让我那该死的时钟类只生成唯
一的实例." 而且, 他接着说 "这个程序太大了, 并不是我一个人完成的. 如果只是我一个人
, 我可以记住只把时钟类实例化一次, 可是, 我还有许多partner , 这并不是一个好方法 ,我
想从设计上保证它! "
想想昨晚刚刚我刚看完设计模式上一个有关保证一个类仅有唯一实例的方法单件(Singleton
), 我不由得喜上心头, 哈哈哈, 可以卖弄一下了! ".
" 你可以把构造函数定义成非公有的, 就可以保证不会生成实例了. " 我笑着说.
" My god , 不会吧 , 非公有的构造函数 , 我可从来没有想过………… 那么我如何生成我
的唯一的时钟呢? 如果是非公有的构造函数中, 那么我好象也没有办法对时钟类实例化………
"
"你可以定义一个对类操作的static型函数, 在这个函数中实例化不就行了么! "
"我还是不太明白! ", Grant 眨了眨眼睛.

我提笔写下以下的例子:

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

Singleton* Singleton::_instance = 0;

Singleton* Singleton::Instance ( )
{
if(_instance == 0)
{
_instance = new Singleton;
}
return _instance;
}

" 这里, Instance函数是static 型函数, 他可以对类进行操作, 而 _instance 是static型
变量, 它只与类相关. Instance 使用惰性初始化, 它直到第一次被调用时才创建唯一的Sing
letion实例. 而构造函数你可以定义为 private型, 这里定义为 protect 型, 可以使你在子
类的函数中重用它, 这样, 如果有人想用Singleton去实例化对象, 就会得到一个编译错误,
他只能通过Instance函数去方问唯一的对象, 明白了吗? "

" 你真是个天才, 这个想法太棒了, 如果我是MM的话, 我一定会嫁给你的! "
" 嫁给我 , 还是算了吧 ! 快去写你的程序. "
看着Grant 的背影, 我吐了吐舌头 , 哈, 天才, 究竟是不是天才, 只有我自己知道!


--------------------------------------------------------------------------------
--------------------------------------
大家看看题目, 设计模式入门, 记住, 这只是入门! 这里介绍的十分浅显. 如果你想要有提
高的话, 还是看<<Design Pattern>>. (哈哈哈, 如果你仔细看的话, 你会发现作者抄袭了好
多! )

作者: hyqryq




...全文

相关推荐

经典c++图书下载2

经典c++图书下载2

nboman

C++设计模式_12_Singleton 单件模式

总体来说,如果是单线程使用版本1已经是足够好了;如果是多线程,使用版本2是OK的,但是效率不高;双检查锁在不使用volatile不能用,是很容易出现问题的;C++11版本之后跨平台实现双检查锁就使用的是最后一个版本保证一个类仅有一个实例,并提供一个该实例的全局访问点–《设计模式》GoFSingleton模式中的实例构造器可以设置为protected以允许子类派生Singleton模式一般不要支持拷贝构造函数和Clone接口,因为这有可能导致多个对象实例,与Singleton模式的初衷违背。

十月旧城

Mastering the C++17 STL Make full use of the standard library components in epub

Mastering the C++17 STL Make full use of the standard library components in C++17 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

yinkaisheng-nj

C++17 STL Cookbook & Mastering the C++17 STL

C++17 STL Cookbook: Discover the latest enhancements to functional programming and lambda expressions Mastering the C++17 STL: Make full use of the standard library components in C++17 C__17 STL Cookbook.epub C__17 STL Cookbook.mobi C__17 STL Cookbook.pdf 9781787120495_Code.zip Mastering the C++17 STL.epub 源码和文档

StrartFromSZ

[AddisonWesley]Design_Components_With_C++_STL.zip

[AddisonWesley]Design_Components_With_C++_STL.zip

lihuaijun
评论 19
收藏 已收藏
分享
返回顶部
hyqryq
非技术区 15,445 成员 58,111 内容