設計模式 單例模式

2021-09-24 13:08:21 字數 1543 閱讀 9877

在系統中只允許產生這個類的乙個例項,

例項說明:很多大臣拜見的皇帝,只有乙個。體現在物件導向方面,cemperor定義乙個靜態指標,和乙個靜態函式,私有化建構函式、析構函式、建構函式複製、過載賦值語句。 

注意:執行緒安全,採用互斥體的方式實現

系統記憶體中該類只存在乙個物件,節省了系統資源,對於一些需要頻繁建立銷毀的物件,使用單例模式可以提高系統效能。

當想例項化乙個單例類的時候,必須要記住使用相應的獲取物件的方法,而不是使用new,可能會給其他開發人員造成困擾,特別是看不到原始碼的時候。

#include #include #include using namespace std;

class ee

~ee(){}

class cc

~cc(){}

}; static cc m_cc;

//static handle m_mutexx;

};ee::cc ee::m_cc;

ee* ee::m_emperor = null;

//handle ee::m_mutexx = createmutex(null, false, null);

class emperor

virtual ~emperor()

emperor(const emperor&);

emperor& operator=(const emperor&);

static emperor *m_emperor;

static handle m_mutex;

string m_emperor_tag;

//這個garbo內部類專門用來判斷m_emperor和m_mutex

class garbo

~garbo()

releasemutex(m_mutex);

}if (null != m_mutex)

}};

static garbo m_garbo;

};emperor* emperor::m_emperor = null;

handle emperor::m_mutex = createmutex(null, false, null);

emperor::garbo emperor::m_garbo;

emperor* emperor::getinstance()

return m_emperor; }

void emperor::releaseinstance()

releasemutex(m_mutex); }}

void emperor::setemperortag(string tag)

void emperor::emperorinfo()

; sprintf_s(msg_buf, 50, "the emperor's name is (%s)", m_emperor_tag.c_str());

string msg(msg_buf);

cout << msg.c_str() << endl;

}int main()

設計模式 單例模式

單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...