在系統中只允許產生這個類的乙個例項,
例項說明:很多大臣拜見的皇帝,只有乙個。體現在物件導向方面,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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...