設計模式之單例模式(singleton)

2021-06-26 14:53:05 字數 1510 閱讀 6783

單例模式用來建立獨一無二的物件。單例模式的物件只能有乙個例項。有些物件我們只需要乙個,比如,執行緒池、快取、對話方塊、日誌物件,充當印表機、顯示卡等裝置的驅動程式的物件。事實上,這類物件只能有乙個例項,如果例項化黑多個這類物件,就可能會導致其他問題的產生。因此單例模式的應用很廣泛。

單例模式在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...