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

原创 2001年09月22日 23:29:00

 

设计模式入门(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



单件模式(Singleton Pattern)(一):单件模式介绍

一、意图          单件模式(又称单例模式)确保一个类只有一个实例,并提供一个全局访问点。 二、适用性 1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问...
  • jialinqiang
  • jialinqiang
  • 2013年05月11日 09:23
  • 3911

C++设计模式5--单例模式Singleton--当前对象只有一个实例

很多情况下,我们在开发项目的过程中,都希望自己运行的某个部件只有一个实例, 比如我们天天用QT开发界面,QTCreate里帮助菜单下的关于Qt Create菜单,弹出来的关于对话框,在QTCreate...
  • gatieme
  • gatieme
  • 2014年01月08日 13:25
  • 21428

设计模式-单例模式(Singleton)各种写法和分析比较

介绍单例模式是设计模式中比较简单容易理解的。它的出现主要是: 保证一个类仅有一个实例,并提供一个访问它的全局访问点 其实就在系统运行期间中保证只有这么一个实例,并能够全局访问。应用场景就是当需要一...
  • Card361401376
  • Card361401376
  • 2016年05月07日 23:51
  • 3806

设计模式:单例模式(Singleton)

单例模式在23个设计模式中算得上是最简单的一个了,也行你会有异议,那就换成“最简单之一”,这样就严谨了很多。   单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。   适用性:当类...
  • u013256816
  • u013256816
  • 2016年03月23日 21:37
  • 4744

c++ 设计模式之单件模式

转载地址:http://blog.csdn.net/lbqbraveheart/article/details/7084509 单件模式应该是所有设计模式中最简单的一个了,但是如果使用不当会出现...
  • u012398613
  • u012398613
  • 2016年04月12日 20:31
  • 302

设计模式之单件模式

有人说单件模式是最简单的模式,因为它只有一个类,但其实它还有一些值得注意的地方,就如:出现并发性时,单件可能已经不是单件了。     先说一下,我们为什么要用到单件模式,当我们用到这些对象如:线程池,...
  • u012367513
  • u012367513
  • 2014年07月19日 15:38
  • 1892

设计模式(创建型)之单例模式(Singleton Pattern)

单例模式可能是23种设计模式中最简单的。应用也非常广泛,譬如Android中的数据库访问等操作都可以运用单例模式。核心概念: 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称...
  • yanbober
  • yanbober
  • 2015年04月27日 16:50
  • 2573

(七)boost库之单例类

一、boost.serialzation的单件实现     单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易...
  • liujiayu2
  • liujiayu2
  • 2016年03月15日 14:37
  • 455

C#设计模式——单例模式(Singleton)

一、引言 最近在设计模式的一些内容,主要的参考书籍是《Head First 设计模式》,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我更深...
  • ycl295644
  • ycl295644
  • 2015年07月06日 08:53
  • 2013

【GOF】单例模式singleTon的再认识

GoF中很经典的模式——单例模式。使用单例的目的是为了避免不一致问题,防止状态变化!简单说来就是,防止我们频繁初始化类的时候造成数据状态不一致的问题,通过单例模式可以保证类的唯一性。 ☆三大特性 ...
  • u010508826
  • u010508826
  • 2016年04月25日 20:18
  • 460
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式入门(1)------单件(Singleton)
举报原因:
原因补充:

(最多只允许输入30个字)