C C 實現單類模式

2021-08-13 04:12:24 字數 1107 閱讀 3762

設計模式名稱: singleton(單例)

設計模式解決的問題:實現只例項乙個物件,程式其他地方應用它;比如程式的日子類,方便**任何地方都可以使用,同時避免引數的傳遞。

設計模式的設計思想:定義乙個類,其中包括了靜態的方法獲取或者例項化該類,生產或者獲得方法有些特別,其他方法都具有普通c/c++特性,如多型性。值得注意是乙個普通的全域性變數的物件或者static 變數物件有時候不夠完成單例的任務,有如下情況原因:

原因1:無法保證單例的靜態物件在**中唯一的宣告。可能在很多函式會有這樣**,從而多次宣告了同乙個物件: static singleton a; 

原因2:全域性變數的物件或者靜態變數的物件無法實現動態初始化。有些單例在例項化時需要一些動態資訊,而才用前者的方法是無法獲取的,因為前者在編譯的時候已經確定。

原因3:全域性變數的物件在各個編譯單元裡初始化時是沒有順序的。因此無法採用判斷語句來確定某個全域性變數是否存在。

設計模型的參與者: 單例,客戶程式

設計模型圖:略

設計模型例項:採用具有子類的單例模型

/** singleton.h

**  created on: dec 7, 2017

*      author: ff

*/#ifndef include_singleton_h_

#define include_singleton_h_

class singleton

;class singletona: public singleton

;class singletonb: public singleton

;#endif /* include_singleton_h_ */

#include

#include

using namespace std;

singleton* singleton::_instance;

singleton* singleton::getinstance(char type)

return _instance;

}singleton::singleton()

singleton::~singleton()

void singleton::makewall()

C C 實現單例模式

乙個類只能建立乙個物件,即單例模式,該模式可以保證系統中該類只有乙個例項,並提供乙個訪問它的全域性訪問點,該例項被所有程式模組共享。比如在某個伺服器程式中,該伺服器的配置資訊存放在乙個檔案中,這些配置資料由乙個單例物件統一讀取,然後服務程序中的其他物件再通過這個單例物件獲取這些配置資訊,這種方式簡化...

列舉類實現單例模式

實現單例模式時候,要思考四個問題 是否執行緒安全 多執行緒安全了,效率是否能接受 是否可以延遲載入 是否支援序列化 請看下面一張圖 列舉實現單例模式如下 簡潔優雅 public enum singleton 0 public void setanint int anint public void d...

python元類單例 元類實現單例模式

python中的類也是物件。元類就是用來建立這些類 物件 的,元類就是類的類,你可以這樣理解為 myclass metaclass 元類建立 myobject myclass 類建立例項 實際上myclass就是通過type 來創建立出myclass類,它是type 類的乙個例項 同時myclass...