最近在學習設計模式方面的知識,隨筆整理。
單例模式:自己來判斷是否已經例項化。保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。
本質:①定義私有的本類靜態物件、物件指標或物件引用;
②將該類的建構函式設為private,防止外部用new來例項化它;
③外部僅能通過公有靜態成員函式獲得唯一物件。
實現方式:懶漢式 餓漢式
懶漢式:當程式第一次訪問單件模式例項時才進行建立。**如下:
static singleton *instance_s;
singleton* singleton::instance_s=0;
singleton* singleton::ins()//懶漢單例模式:即物件在函式首次被訪問時建立。
return instance_s;
}餓漢式:
在程式啟動或單件模式類被載入的時候,單件模式例項就已經被建立。
**如下:
static singleton* instance_s ;//類內私有
singleton* singleton::instance_s=new singleton;//類外初始化
singleton *singleton::ins()//類內公有靜態函式外部實現析構方法:
#include
#include
class singleton : public qobject
;
singleton::garbo singleton::garbo;如果程式 執行期間都不會析構,那你程式退出也就沒必要析構了,作業系統自動**記憶體。另外,如果你的靜態成員是 static classb b;
程式結束時,自動呼叫析構。
參考:qt**之一:記憶體洩露(總結)
qt中記憶體洩露和退出崩潰的問題
如何選擇:如果單例模式例項在系統中經常會被用到,餓漢式是乙個不錯的選擇。
反之如果單例模式在系統中會很少用到或者幾乎不會用到,那麼懶漢式是乙個不錯的選擇。
種類:單執行緒模式 多執行緒模式
單執行緒模式比較簡單,見實現方式。
多執行緒一般採用雙重鎖定機制來保證安全性,可參考:
qt中實現單例模式(singleton)
多執行緒安全的單例模式可參考:
應用場合:高併發模式下,維持資料庫連線的唯一性;gui程式設計中彈窗的唯一性;
需要頻繁例項化然後銷毀的物件;
建立物件時耗時過多或者耗資源過多,但又經常用到的物件;
頻繁訪問資料庫或檔案的物件。
以及其他所有要求只有乙個物件的場景,
例如資源管理器、印表機、通訊埠等。
可參考:設計模式之——單例模式(singleton)的常見應用場景
補充:在《設計模式:可復用物件導向軟體的基礎》一書中對單例模式的適用性有如下描述:
1、當類只能有乙個例項而且客戶可以從乙個眾所周知的訪問點訪問它時。
2、當這個唯一例項應該是通過子類化可擴充套件的,並且客戶應該無需更改**就能使用乙個擴充套件的例項時。
相關博文:設計模式之單例模式(c++)
設計模式 單例模式
單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...