單例模式:作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。
單例模式的要點有三個;一是某個類只能有乙個例項;二是它必須自行建立這個例項;三是它必須自行向整個系統提供這個例項。在下面
的物件圖中,有乙個"單例物件",而"客戶甲"、"客戶乙" 和"客戶丙"是單例物件的三個客戶物件。可以看到,所有的客戶物件共享乙個單例對
象。而且從單例物件到自身的連線線可以看出,單例物件持有對自己的引用。
一些資源管理器常常設計成單例模式。讓乙個類產生同乙個物件對客戶端服務的時候,比如管理資料庫連線,管理檔案io等,這時我們就要使用
到單例模式。下面是該模式的c++實現(注澤說明)
#include
using namespace std;
//單例類的c++實現
class singleton
;
//構造方法實現
singleton::singleton()
singleton::~singleton()
//初始化靜態成員
singleton* singleton::instance=new singleton();
singleton* singleton::getinstance()
//seter && getter含數
int singleton::getvar()
void singleton::setvar(int var)
//main
int main(int argc, char* argv)
輸出如下:
singleton constructor
ton1 var = 20
ton2 var = 150
在輸出結果中,構造方法只呼叫了一次,ton1與ton2是指向同乙個物件的。
單例模式是建構函式被私有化,並且唯一的例項在類中的私有成員中被定義成static,
類的初始化就做了一次。
singleton constructor
ton1 var = 20
ton2 var = 150
所以所有的新的物件都只用這乙個例項。和靜態成員變數有區別
singleton *ton1 = singleton::getinstance();
singleton *ton2 = singleton::getinstance();
class singleton
;singleton * singleton::getsingleinstance()
unlock();//
}return ins_ptr;}
幾個條件:
1. 單例的構造是執行緒安全的。我建議在程式還只有單個執行緒的時候構造例項,這樣就不用double-lock模式,meyers模式就足夠了:
class single
public:
static single & getinst()
};2. 單例本身是執行緒安全的,即呼叫單例物件的介面的時候,必須保證執行緒安全;
3. 單例的析構是執行緒安全的。如果程式裡面不要顯式析構單例物件,就讓os**吧,這樣程式設計師不需要有做任何事情。
C 單例模式與執行緒安全
1.教科書裡的單例模式 我們都很清楚乙個簡單的單例模式該怎樣去實現 建構函式宣告為private或protect防止被外部函式例項化,內部儲存乙個private static的類指標儲存唯一的例項,例項的動作由乙個public的類方法代勞,該方法也返回單例類唯一的例項。上 class singlet...
c 多執行緒單例模式 執行緒安全C 單例模式
我對此處記錄的單例模式有一些疑問 http us library ff650316.aspx 以下 摘自該文章 using system public sealed class singleton private static volatile singleton instance private ...
單例模式與執行緒安全
請看如下的單例類 class singleton return singleton 首先判斷singleton是否為null,如果是就建立singleton物件,否則直接返回singleton。但是判斷和建立並非原子操作,假設執行緒1正在執行null singleton,判斷為true,準備執行下一...