首页 > 代码库 > 单例模式

单例模式

  单例模式也称为单件模式,可能是所有模式中使用最广泛也是最简单的设计模。其目的是保证仅有一个类实例,
并提供一个访问它的全局访问点,该实例被所有程序模块共享。费话少说,重在意会,翠花上菜了:
  下面主要提两种常见的设计方法:普通方法与模板方法
  

 1   /** 2     * @class Singleton 3     * @brief This is a  class for managing singleton \n 4     * objects allocated on the heap. 5     */ 6     class Singleton 7     { 8     public: 9     10         /**11          * Create a static object12          * @return Singleton13          */14         static Singleton * Instance()15         {16             if(NULL == m_pInstance)  17                 m_pInstance = new Singleton();18     19             return m_pInstance;20         }21     22         /**23          * Destroy Singleton object24          */25         static void Unistance()26         {27             if(0 == m_pInstance)28             {29                 delete m_pInstance;30                 m_pInstance = 0;31             }32         }33     34     private:35         Singleton() : m_pInstance(0) {} 36         Singleton(const Singleton&);37         Singleton& operator=(const Singleton&);38     39         static Singleton *m_pInstance;40     };41 42 43     /**44     * @class Singleton45     * @brief This is a template class for managing singleton objects allocated 46     * on the heap.47     * For example 48     * class Test : public Singleton<Test>49     * {50     *        friend class Singleton<Test>;51     * }52     */53     template <class T>54     class Singleton55     {56     public:57         /**58          * Create a static object59          * @return T*60          */61         static T* Instance()62         {63             if ( 0 == s_instance )64             {65                 s_instance = new T;66             }67     68             return s_instance;69         }70     71         /**72          * Destroy Singleton object73          */74         static void Uninstance()75         {76             if ( 0 != s_instance )77             {78                 delete s_instance;79                 s_instance = 0;80             }81         }82     83     protected:84         Singleton() {}85         virtual ~Singleton() {}86     87     private:88         Singleton(const Singleton<T> &);89         Singleton<T>& operator= (const Singleton<T> &);90     91         static T* s_instance;92     };93     94     template <class T>95     T* Singleton<T>::s_instance = 0;

  单例模式的优点:
    在内存中只有一个对象,节省内存空间
    避免频繁的创建销毁对象,可以提高性能
    避免对共享资源的多重占用
    可以全局访问

单例模式