单例模式

  最初接触到设计模式这个玩意儿是因为一次笔试,问题是设计一个只能实例化一个对象的类,然后郁结了很久,最后写出来的代码一团糟,完全达不到效果。然后回来google一下,才发现我有多孤陋寡闻。好了,闲话不说,进入正题。

  根据维基百科的释义,单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。

  实现的思路即是,将类的构造函数声明为私有的,该类能返回对象的引用(用一个类指针保存,通常声明为static)和获取这个实例的函数(通常是getInstance)。当这个引用为空时,说明类没有实例对象,此时,创建该类的实例对象,且把实例的引用赋给类指针。当引用不为空时,返回类指针指向的对象。

  具体实现如下:

 1 #include<iostream>
 2 #include<cstdlib>
 3 using namespace  std;
 4 
 5 class  Singleton
 6 {
 7     private:
 8         Singleton();
 9         static Singleton* instance;
10         int data;   //test data
11     public:
12         ~Singleton();
13         static Singleton* getInstance();
14 };
15 
16 Singleton* Singleton::instance = NULL;
17 
18 Singleton::Singleton()
19 {
20     data = 10;
21     cout<<"Singleton constructure...."<<endl;
22 }
23 
24 Singleton* Singleton::getInstance()
25 {
26     if(instance == NULL)
27         instance = new Singleton();
28     return instance;
29 }
30 
31 Singleton::~Singleton()
32 {
33     if(instance != NULL)
34     {
35         cout<<"Singleton destructure"<<endl;
36         //delete instance;//静态数据是由OS释放的
37         instance == NULL;
38         //system("pause");
39     }
40 }
41 
42 int main()
43 {
44     Singleton *ton = Singleton::getInstance();
45     delete ton;
46     system("pause");
47     return 0;
48 }

  需要注意的是,因为instance是静态的(static),因此在析构函数中千万不要写出delete instance;这样的语句来,因为静态数据是存储在全局区(静态区)的,它们实在程序结束后由系统回收的。这条语句的后果就是引发异常(无限执行析构函数)。

posted @ 2012-08-29 19:32  山野樵夫  阅读(205)  评论(0编辑  收藏  举报