標籤:style blog io color os 使用 sp on div
意圖:保證一個類僅有一個執行個體,並提供一個訪問它的全域訪問點。
實用性:1.當類只能有一個執行個體而且客戶可以從一個眾所周知的訪問點訪問它。
2.當這個唯一的執行個體應該是通過子類可擴充的,並且客戶應該無需更改代碼就能使用一個擴充的執行個體時。
效果: 1.只有一個執行個體,可以嚴格的控制客戶怎樣以及何時訪問。
2.縮小名空間,避免了唯一執行個體的全域變數汙染名空間。
3.可以控制對象的執行個體個數。
程式碼範例:這裡類是一個人Micla,世界上僅有一個Mical,只能產生一個執行個體。
#ifndef _SINGLETON_#define _SINGLETON_class Mical{public: ~Mical(){} static Mical* GetMical() { if(NULL == _mpMical) { _mpMical = new Mical; static Delete Del; } return _mpMical; }private: static Mical* _mpMical; ////避免了不同情況執行個體化類對象 Mical(const Mical& another){} Mical& operator = (const Mical& another){} Mical(){}};#endif
實現部分:
#include <iostream>#include "Singleton.h"using namespace std;Mical* Mical::_mpMical = NULL;int main(){ Mical* pMical = Mical::GetMical(); delete Mical::GetMical(); return 0;}
用Mical* pMical = Mical::GetMical(); 實現了訪問Micla 然後我們可以通過pMical訪問Mical的各種屬性(假設為:身高,性別等)
之後通過delete Mical::GetMical(); 刪除對象。 但這樣的刪除容易被遺忘,因為new的過程是被封裝起來的。
於是通過內嵌類實現自動delete:
#ifndef _SINGLETON_#define _SINGLETON_class Mical{public: ~Mical(){} static Mical* GetMical() { if(NULL == _mpMical) { _mpMical = new Mical; static Delete Del; } return _mpMical; } private: static Mical* _mpMical; ////避免了不同情況執行個體化類對象 Mical(const Mical& another){} Mical& operator = (const Mical& another){} Mical(){} class Delete{ public: Delete(){} ~Delete(){delete _mpMical;} };};#endif
這就實現了Singleton;
要注意的是 1.封死其他的執行個體化介面 2.對象刪除問題處理
-----新手初學,望大神指點-----
單件模式