设计模式之单例模式
单例模式也称为单件模式,可能是所有模式中使用最广泛也是最简单的设计模。其目的是保证仅有一个类实例,
并提供一个访问它的全局访问点,该实例被所有程序模块共享。费话少说,重在意会,翠花上菜了:
下面主要提两种常见的设计方法:普通方法与模板方法
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 object 12 * @return Singleton 13 */ 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 object 24 */ 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 Singleton 45 * @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 Singleton 55 { 56 public: 57 /** 58 * Create a static object 59 * @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 object 73 */ 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;
单例模式的优点:
在内存中只有一个对象,节省内存空间
避免频繁的创建销毁对象,可以提高性能
避免对共享资源的多重占用
可以全局访问
不进则退、与时俱进