單例模式用來建立獨一無二的物件。單例模式的物件只能有乙個例項。有些物件我們只需要乙個,比如,執行緒池、快取、對話方塊、日誌物件,充當印表機、顯示卡等裝置的驅動程式的物件。事實上,這類物件只能有乙個例項,如果例項化黑多個這類物件,就可能會導致其他問題的產生。因此單例模式的應用很廣泛。
單例模式在head first 給出的定義是 :確保乙個類只有乙個例項,並提供乙個全域性訪問點。
單例模式的要點有三個:1 類只有乙個例項 2 類定義中含有乙個該類的私有物件 3 提供靜態成員函式來建立或者獲取其本身的私有靜態物件。
單例模式是所有模式中最為簡單的。單例模式的實現方式有很多種。如下所示:
//singleton patterns one
class singletonone
~singletonone()
public:
static singletonone* getinstance()
void initialize()
void add() };
/* * singleton patterns two
* must explicit call destructor
*/
class singletontwo
~singletontwo()
public:
static singletontwo* getinstance()
return m_instance;
} void initialize()
void add() };
/** singleton patterns three
* must explicit call destructor
*/class singletonthree
~singletonthree()
public:
static singletonthree* getinstance()
void initialize()
void add()
};
呼叫單例模式的測試**:
#include#include#include"singleton.h"
singletonone singletonone::m_instance;
singletontwo* singletontwo::m_instance;
int main()
上面使用三種方式分別實現了單例模式。通過顯式編寫建構函式和析構函式,可以讓我們對單例模式的構造『、析構有更為深刻的了解。
單例模式雖然很簡單,但需要處理多執行緒情況下出現多個例項的情況。比如,當乙個執行緒判斷例項為空時,還沒建立例項時,系統就把cpu使用權交給另外乙個執行緒,第二個執行緒判斷沒有例項,會建立乙個例項,當作業系統將cpu使用權再次分配給執行緒一是就會建立第二個例項,引發執行緒災難。只要把getinstance()方法變成同步。多執行緒災難即可迎刃而解。可以通過加鎖的方式解決。這裡就不在列出例項**。
Java設計模式 單例模式(single)
目錄目的 應用例項 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。菜鳥教程 乙個國家有乙個首都 windows 是多程序多執行緒的,在操作乙個檔案的時候,就不可避免地出現多個程序或執行緒同時操作乙個檔案的現象,所以所有檔案的處理必須通過唯一的例項來進行。第一種 package com.ga...
設計模式之單例模式
前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...
設計模式之單例模式
package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...