C++新手学习--单件模式(Singleton Pattern)

单件模式(Singleton Pattern)

  关于设计模式,网上有很多相关的书籍。博客园也有很多优秀的文章。

  这里,我不再介绍设计模式的详细概念,因为很多人都已经讲了,而且都讲得非常好。请看我整理的这些链接:

  http://www.cnblogs.com/rollenholt/category/317053.html

  http://www.cnblogs.com/abcdwxc/category/106719.html

  http://www.cnblogs.com/lovecherry/archive/2007/10/17/927728.html

  http://www.cnblogs.com/jonniexie/category/250714.html

 

  那我为什么还要写这篇博文呢?

  本人代码量有限,C++基础也一般。在学习设计模式的时候,感觉阻力很大。对于很多概念的理解,仅仅停在表面。【看了不一定懂,懂了不一定会,会了不一定能用】。参考了网上的一些资料,却发现好多猿友都是用Java或者C#来讨论,也没有给出比较完整的源代码(他们给出了关键代码)。(勿喷,请理解一个新手+菜鸟 的辛酸)。

  因此,我觉得我应该写一些设计模式的Demo。通过实际的Demo来加深自己对模式的理解。至少,人家让你写一个模式的时候,你能把这个模式的Demo写出来。尽管这个模式的Demo还有很多漏洞需要完善。但是,写出这个Demo,你已经漂亮地迈出了第一步。。。。。。

  适合的读者:1.C++初级菜鸟程序员;2.没有丰富的代码量;3.对设计模式了解不多;

  欢迎高手指点。。。。。。。。。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Singleton
 5 {
 6 private:
 7     // private构造函数
 8     Singleton()
 9     {
10         cout << "创建唯一的实例" << endl;
11     }
12 
13     // 私有静态变量,其类型为 Singleton
14     static Singleton  *_instance;
15     // 析构函数
16     ~Singleton();
17 
18 public:
19     static Singleton *Instance()
20     {
21         cout << "Singleton::Instance()函数被调用" << endl;
22 
23         if (0 == _instance)
24         {
25             _instance = new Singleton();
26         }
27         return _instance;
28     }
29 
30 public:
31     void print()
32     {
33         cout << "Do something!" << endl;
34     }
35 };
36 
37 // static 类型的成员变量是这种语法格式
38 Singleton* Singleton::_instance = 0;
39 
40 int main()
41 {
42     Singleton *sg1 = Singleton::Instance();
43     sg1->print();
44 
45     Singleton *sg2 = Singleton::Instance();
46     sg2->print();
47 
48     // 通过这两个实例对比,你能看到,Instance()函数被调用了2次,但是Singleton实例只被创建了1次。
49     
50     return 0;
51 }

  

  Instance方法保证只有在第一次调用时才会生成Singleton对象,以后的调用只是简单返回唯一的已存在的实例。

  总结
  静态声明 + 静态构造函数实例化
  注意:
  1.私有化构造函数
  2.实例化之前进行Check
  3.多线程模式,加锁
  Singleton核心---禁止用户对对象使用new

  程序是在vc6.0的编译器下编译通过。本人假定读者知道怎样把vc6.0里面的代码,转移到vs2008或其他更高版本的vs编译器下面,并让程序编译通过。 

  对于我,对于初学者,有时候一个东西,如果讲得过深,讲得过于全面,很有可能会让我/初学者抓不到重点。 

  这是一个Singleton模式的简单C++例子。这个例子也需要花点时间理解的。至少本人现在还在进一步理解这个例子当中。那些需要完善的地方,暂时会缓一缓。。。。。

  当然,如果你能完全理解这个例子,你可能会发现,这个例子还有一些地方需要完善。

  以下是一些参考博文,已经熟练理解这个Singleton的读者,可以阅读下面的几个链接博文,让你【举一反三】:

  http://www.cppblog.com/ant/archive/2007/09/07/31445.html

  http://www.cnblogs.com/vimmer/archive/2013/04/03/2998808.html

  http://www.cnblogs.com/Daywei/archive/2011/12/27/2303841.html

 

posted @ 2013-04-19 23:13  He_LiangLiang  阅读(586)  评论(1编辑  收藏  举报