設計模式主要需要基於以下的物件導向設計原則:
1,對介面程式設計而不是對實現程式設計。
2,優先使用物件組合而不是繼承。
乙個類不管建立了多少次物件,永遠之只能得到該型別乙個物件的例項
此型別模式常用於,比如日誌模組 資料庫模組等
單例模式又分為:
餓漢式單例模式
懶漢式單例模式
class singleton
static singleton instance;
private:
singleton() {}
singleton(const singleton &obj) = delete;
singleton& operator=(const singleton &obj) = delete;
};singleton singleton::instance;
簡單來說寫乙個懶漢式單例模式的步驟為
建構函式私有化
定義乙個唯一類的靜態例項物件
提供獲取類的唯一例項物件的介面方法
餓漢式單例模式,一定時執行緒安全的。
但是此種單例模式存在一種問題,由於程式啟動時需要對單例模式唯一的靜態例項化物件進行初始化操作,啟動時浪費大量的時間,這不是所被人們期望的。當我們第一次使用到單例物件的時候,我們才希望對單例物件進行構造的操作,所以我們又引出了懶漢式的單例模式。
std::mutex mmtx;
class singleton
} return instance;
} static singleton * volatile instance;
private:
singleton() {}
singleton(const singleton &) = delete;
singleton& operator=(const singleton&) = delete;
};singleton * volatile singleton::instance = nullptr;
此單例模式,instance的初始值為nullptr只有當第一次使用單例的地方才對單例物件初始化,這種操作是符合人們所期望的。
需要注意的是,懶漢式單例模式為了執行緒安全和把獲取單例物件的函式實現為可重入函式,我們這裡使用鎖加雙重判斷的機制。
class singleton
static singleton * volatile instance;
private:
singleton() {}
singleton(const singleton &) = delete;
singleton& operator=(const singleton&) = delete;
};
此種方式可以實現簡單的懶漢式單例模式,我們並沒考慮執行緒安全問題,但是此種方法在編譯轉為反彙編**的時候編譯器自動幫助我們上鎖考慮了安全問題。
我們可以在g++來驗證這個過程。
設計模式 單例模式
單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...
設計模式 單例模式
class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...
設計模式 單例模式
單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...