Singleton單件設計模式

2021-05-01 04:42:22 字數 1412 閱讀 6823

單例模式也稱為單件模式、單子模式

,其應用場景是程式中需要寫個類,而這個類只能產生乙個例項。這個例項在全域性被所有類都能夠呼叫到,這個時候我們所使用的就是單例模式。該例項被所有程式模組共享。有很多地方需要這樣的功能模組,如系統的日誌輸出等。

而乙個例項的實現方式有很多種,可以通過全域性變數來實現,但這樣的**顯得很**觀。

下面舉個

c/s架構中客戶端中用到的單例模式,這個客戶端與伺服器之間網路通訊採用

windows socket

實現。而客戶端程式中之需要乙個

socket

就可以實現與伺服器端通訊,故乙個客戶端只需要開啟乙個

socket

,寫乙個類封裝封裝這個

socket

,封裝socket

的這個類就可以採用單例模式。下面說說單例模式的特點。

單例模式的要點有三個;一是某各類只能有乙個例項;二是它必須自行建立這個事例;三是它必須自行向整個系統提供這個例項即以下特徵:

u它有乙個指唯一例項的靜態指標

m_pinstance

,並且是私有的。

u它有乙個公有的函式,可以獲取這個唯一的例項,並在需要的時候建立該例項。

u它的建構函式是私有的,這樣就不能從別處建立該類的例項

以客戶端封裝

socket

的tkcommunication

類為例,如下:

class tkcommunication ;

tkcommunication

類中的tkcomm

成員變數就滿足唯一指向例項的靜態指標。

建構函式

tkcommunication();

為私有函式,這樣保證了例項不能在別處被建立。公有函式

getinstance()

用以獲取這個唯一例項,並在需要的時候建立,並且保證只有乙個例項。

部分實現**如下:

//用以初始化私有靜態成員變數

tkcommunication* tkcommunication::m_tkcomm = null;

//為程式呼叫提供例項入口,並在需要的時候建立例項。

tkcommunication* tkcommunication::getinstance()

return m_tkcomm; }

當程式中呼叫這個例項用以接收傳送資料時,只需執行

iret = tkcommunication::getinstance()->recvdata ((char *)m_msg);

iret = tkcommunication::getinstance()->senddata((char *)m_msg);

最後,感謝高成

eason

提供例子

設計模式 單件 Singleton

單件模式 singleton 什麼時候使用?當需要獨一無二的物件時,請想起他。舉例 執行緒池 threadpool 快取 cache 對話方塊,處理偏好設定和登錄檔 registry 的物件,驅動程式物件。無需具體例子,先看類圖 包含乙個private的自己的例項。private的建構函式,確保無法...

設計模式 單件模式(Singleton)

singleton 在軟體系統中,經常有這樣一些特殊的類,必須保證它們在系統中只存在乙個例項,才能確保它們的邏輯正確性 以及良好的效率,比方說 執行緒池 threadpool 快取 cache 對話方塊 處理偏好設定和登錄檔的物件 日誌物件,充當印表機 顯示卡等裝置的驅動程式的物件。這些類物件只能有...

設計模式之 單件模式(Singleton)

單件模式的實現很簡單,基本上沒什麼好說,就說幾點 為什麼要單件模式?因為程式中很多物件只能有乙個,如日誌檔案,印表機等,如果出現多個就麻煩了。為什麼不用全域性變數?的確用全域性變數可以實現只有乙個物件,但是全域性變數必須在程式啟動的時候就初始化,萬一我們的物件很耗資源,但又不一定用到的話,全域性變數...