常見設計模式之單例設計模式

2021-10-19 21:13:03 字數 1288 閱讀 8437

設計模式經典gof定義的單例模式需要滿足以下兩個條件:

1、保證乙個類只建立乙個例項。

2、提供對該例項的全域性訪問點。

如果系統有類似的實體(有且只有乙個,且需要全域性訪問),那麼就可以將其實現為乙個單例。

單例模式的優點:

1、在記憶體中只有乙個物件,節省記憶體空間

2、避免頻繁的建立銷毀物件,可以提高效能

3、避免對共享資源的多重占用

4、可以全域性訪問

實際工作中常見的應用舉例:

1、日誌類,乙個應用往往只對應乙個日誌例項。

2、配置類,應用的配置集中管理,並提供全域性訪問。

3、管理器,比如windows系統的任務管理器就是乙個例子,總是只有乙個管理器的例項。

4、共享資源類,載入資源需要較長時間,使用單例可以避免重複載入資源,並被多個地方共享訪問。

實現乙個簡單的單例模式**示例如下:

#include

using namespace std;

mutex _mt;

class

csingleton

public

:static csingleton *

getinstance()

_mt.

unlock()

;}return m_instance;

}public

:static csingleton * m_instance;

};

但是上述實現有個問題,返回的是指標,有可能被人為的delete掉,導致物件被提前銷毀。還是建議使用返回引用的方式。

另外也可以使用static magic。如果當變數在初始化的時候,併發同時進入宣告語句,併發執行緒將會阻塞等待初始化結束。這樣可以保證併發執行緒在獲取靜態區域性變數的時候一定是初始化過的,所以具有執行緒安全性。

#include 

using namespace std;

class

csingleton

public:~

csingleton()

static csingleton &

getinstance()

_mu.unlock();}*/

return _singleton;

}static csingleton & _singleton;};

int main()

執行結果是:

csingleton

~csingleton

常見設計模式之 單例模式

遇到類似的問題 生產編號的產生,售票系統等資料需要同步,馬上想到單例模式.例子 package singleton description 單例模式 author potter date 2012 8 14 下午10 08 16 version v1.0 public static void mai...

設計模式之 單例設計模式

單例設計模式 單例設計模式概述 單例模式就是要確保類在記憶體中只有乙個物件,該例項必須自動建立,並且對外提供。優點 在系統記憶體中只存在乙個物件,因此可以節約系統資源,對於一些需要頻繁建立和銷毀的物件單例模式無疑可以提高系統的效能。缺點 沒有抽象層,因此擴充套件很難。職責過重,在一定程式上違背了單一...

設計模式之單例設計模式

singleton 保證乙個類只有乙個例項,並提供訪問它的全域性訪問點 類初始化時,立即載入這個物件 沒有延時載入的優勢 載入類時,天然的是執行緒安全的!private static singletondemo1 instance new singletondemo1 private singlet...