單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。
1 在類的 構造方法定義為私有方法,這樣其他處的**就無法通過呼叫該類的構造方法來例項化該類的物件,只有通過該類提供的靜態方法來得到該類的唯一例項;
2 在類內 提供乙個靜態方法,呼叫該方法時,若存在例項就返回這例項的個引用,若無例項 就 建立該類的例項 並 返回例項的引用。
1 全域性只有乙個例項:要求是靜態,並且私有構造(防止使用者自己宣告並定義例項)
2 執行緒安全
3 禁止賦值和拷貝
4 使用者通過介面獲取例項:使用 static 類成員函式
唯一類的例項,具有全域性變數的特點,在任何位置都可以通過介面獲取到那個唯一例項。例如資料池,用來快取資料的資料結構,需要在一處寫,多處讀取 或 多處寫,多處讀取。如**站等。
優點:在記憶體中只有乙個物件,節省記憶體空間;
避免頻繁的建立銷毀物件,可以提高效能;
避免對共享資源的多重占用,簡化訪問;
為整個系統提供乙個全域性訪問點。
缺點:不適用於變化頻繁的物件。
只有第一次呼叫時才會 將建立例項。提供其中一種將例項設定為靜態的方式,可以保證執行緒安全(c++11 特性: 如果當變數在初始化的時候,併發同時進入宣告語句,併發執行緒將會阻塞等待初始化結束),防止記憶體洩漏(區域性靜態變數的生命週期為整個源程式)
包括 雙重加鎖實現,靜態初始化實現。
懶漢模式
靜態初始化實現
#include
using
namespace std;
class
singleton
//singleton(const singleton&)=delete;
//singleton& operator=(const singleton&)=delete;
static singleton&
get_instance()
private
:singleton()
};intmain()
呼叫結果
constructor called!
destructor called!
在單例類定義的時候就進行例項化。餓漢實現本來就是執行緒安全的,不用加鎖。
但是如果一直未使用,可能造成資源的浪費。
餓漢式單例
class
sigletion
static sigletion * intance=
new sigletion;
//靜態成員,指向sigletion物件的指標。
public
://提供靜態共有方法,可以使用類名加網域名稱進行訪問,返回物件指標;
static sigletion*
getsigletion()
};
設計模式 單例模式
單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...