設計模式學習系列1 單例模式

2021-09-06 12:34:21 字數 1533 閱讀 3369

為什麼學習單例模式,因為單例模式用的比較廣泛,遊戲客戶端的配置檔案讀取類,伺服器日誌類等等,都是使用單例模式來實現,單例模式也即是保證類只有乙個例項,並且訪問類全域性的介面,這種方法可以使用全域性來實現,但不能保證只存在乙個,最好的辦法是類中做限制,現在單例模式的實現方法有兩種,一種稱為餓漢式,類載入的時候就初始化,另外一種是懶漢式,在使用的時候建立物件

1懶漢模式指標版本

class singletonp

~singletonp(){}; // 析構的時候不會呼叫

static singletonp * psingle ;

string str ;

class cgarbo //它的唯一工作就是在析構函式中刪除singletonp的例項

};

static cgarbo garbo; //定義乙個靜態成員變數,程式結束時,系統會自動呼叫它的析構函式

public:

// ~singletonp();

// 獲得類方法的介面,在第一次使用的時候建立

static singletonp* getsingletonp()

void printnum()

};

這種寫法需要注意釋放問題,因為靜態變數和全域性變數一樣實在系統結束的時候系統釋放,利用這個特徵,建乙個區域性類,專門用來釋放需要師範的引數

2懶漢模式靜態區域性變數
class singletona

~singletona()

singletona(const singletona& single);

singletona operator=(const singletona& single);

string str ;

public:

// 獲得類方法的介面,在第一次使用的時候建立

static singletona* getsingletona()

void printnum()

};

這種方法是用的比較多的,其中建構函式,賦值函式全部私有化,只提供區域性靜態的返回介面

3餓漢模式

class singletone

~singletone()

static singletone singleclass ;

string str ;

public:

static singletone* getsingletone()

void printnum()

};

4單例模式總結

對於執行緒安全,還有一種雙重鎖的寫法

單例模式使用靜態變數,如果出現互相之間的呼叫需要注意初始化順序等問題

懶漢模式

最優單例模式

technorati 標籤:

設計模式

設計模式學習系列1 單例模式

為什麼學習單例模式,因為單例模式用的比較廣泛,遊戲客戶端的配置檔案讀取類,伺服器日誌類等等,都是使用單例模式來實現,單例模式也即是保證類只有乙個例項,並且訪問類全域性的介面,這種方法可以使用全域性來實現,但不能保證只存在乙個,最好的辦法是類中做限制,現在單例模式的實現方法有兩種,一種稱為餓漢式,類載...

設計模式系列 單例模式

單例模式 確保乙個類只有乙個例項,並提供乙個全域性訪問點。什麼情況下需要單例模式?一些類提供公共功能供別人呼叫,本身不會處理業務邏輯 類會被許多類和執行緒呼叫 單例模式的一些注意點 單例的生存期超長,會導致記憶體的持續占用。單例在多執行緒環境需要小心的處理執行緒互斥,進行資源保護。單例在類的繼承樹中...

設計模式系列 單例模式

單例模式就是指單例類在一定的生命週期內只能有乙個物件例項,單例類的建立必須是本身,並能給使用者提供自身。在現實世界中,每個生命體都可以被看做是乙個單例物件,唯一且具體,具有不可複製性。同樣的,在軟體開發領域中,有時我們需要保證客戶端在當前的客戶機上只能執行乙個例項這個時候,我們就應該考慮使用單例模式...