C++ 設計模式之單例模式(含程式碼)

單例模式

概念:

單位模式是一種物件建立型模式,使用單位模式可以保證為一個位置生存唯一的例項物件。也就是說,在整個程式空間中,該位置存在一個例項物件

在應用系統開發中,我們常常有以下需求:

在多個執行緒之間,比如初始化一次socket資源,比如servlet環境,共享同一個資源,或者操作同一個物件

在整個程式空間使用全域性變數,共享資源

大規模系統中為了效能的考慮,需要節省物件的建立時間等等

因為singletion模式可以保證為一個位置生成唯一的例項物件,所以這些情況singletion模式就派上用場了

實現單例的常用步驟

建構函式私有化

提供一個全域性的靜態方法

在類中定義一個靜態指標,指向本類的變數的靜態變數指標

單例-懶漢式

#includeusing namespace std;class SingeLton{private: SingeLton() { cout << “ SingeLton建構函式 ” << endl; }public: static SingeLton *getInstance() { if (m_psl == NULL) { m_psl = new SingeLton; } return m_psl; } static void FreeInstance() { if (m_psl != NULL) { delete m_psl; m_psl = NULL; } }private: static SingeLton *m_psl;};SingeLton*SingeLton::m_psl = NULL;//對靜態變數初始化的方法要放在類的外面void main11(){ SingeLton*p1 = SingeLton::getInstance(); SingeLton*p2 = SingeLton::getInstance(); if (p1 == p2) { cout << “是同一個物件 ” << endl; } else { cout << “不是同一個物件 ” << endl; } SingeLton::FreeInstance(); return; }void main(){ main11(); cout << “hello。。” << endl; system(“pause”); return;}

單例_餓漢式

#includeusing namespace std;class SingeLton{private: SingeLton() { cout << “ SingeLton建構函式 ” << endl; }public: static SingeLton *getInstance() { return m_psl; } static void FreeInstance() { if (m_psl != NULL) { delete m_psl; m_psl = NULL; } }private: static SingeLton *m_psl;};SingeLton*SingeLton::m_psl = new SingeLton;void main11(){ SingeLton*p1 = SingeLton::getInstance(); SingeLton*p2 = SingeLton::getInstance(); if (p1 == p2) { cout << “是同一個物件 ” << endl; } else { cout << “不是同一個物件 ” << endl; } SingeLton::FreeInstance(); return; }void main(){ main11(); cout << “hello。。” << endl; system(“pause”); return;}