设计模式学习笔记-Singleton

来源:互联网 发布:网络媒介的优点 编辑:程序博客网 时间:2024/04/23 19:51

这个应该是比较简单的一个设计模式,也是我接触的第一个模式。要点是构造函数声明为私有,定义一个指向自己的静态指针,在合适的时候new一个对象。简单的代码如下:

   1: class Singleton {
   2: public:
   3:     static Singleton* instance()
   4:     {
   5:         if (_instance == NULL) 
   6:         {
   7:             _instance = new Singleton;
   8:         }
   9:         return _instance;
  10:     }
  11: private:
  12:     Singleton(){}
  13:     ~Singleton(){}
  14:  
  15: private:
  16:     static Singleton* _instance;
  17: };
  18:  
  19: Singleton* Singleton::_instance = NULL;

仅仅是练习一下而已,没有实际的用处。实际代码中必须要有其他的成员变量和函数才能发挥功能。

首先一个问题是上面的代码线程不安全。static的东西,在多线程访问并“创建”的时候必须要加锁保护一下才行。一般用“双重锁定检查”来做,这里省略。

另外一个问题是如何释放资源。如果把析构函数设置为私有的,就不能显示去delete。如果设置为公共的,封装性又不太好,毕竟不应该谁都能删除一个公共的资源。一种建议的做法是再搞另一个对象来管理单体,在合适的时候让那个对象来删除单体资源,这里要用到友元类。单体一般生命周期都很长,很多代码几乎都不删除单体。

最后一个问题是单体可以用模板来自动生成,ACE就有这样的模板来生成单体。

原创粉丝点击