C++ 單例模式的詳解及實例
1.什么叫單例模式? 
單例模式也稱為單件模式、單子模式,可能是使用最廣泛的設計模式。其意圖是保證一個類僅有一個實例,并提供一個訪問它的全局訪問點,該實例被所有程序模塊共享。有很多地方需要這樣的功能模塊,如系統的日志輸出,GUI應用必須是單鼠標,MODEM的聯接需要一條且只需要一條電話線,操作系統只能有一個窗口管理器,一臺PC連一個鍵盤。 
通過單例模式, 可以做到: 
(1)確保一個類只有一個實例被建立 
(2)提供了一個對對象的全局訪問指針 
(3)在不影響單例類的客戶端的情況下允許將來有多個實例
2.怎樣實現單例模式 
一個簡單的單例模式該怎樣去實現:構造函數聲明為private或protect防止被外部函數實例化,內部保存一個private static的類指針保存唯一的實例,實例的動作由一個public的類方法代勞,該方法也返回單例類唯一的實例。
3.具體實現 
(1)最簡單的單例模式(懶漢模式) 
懶漢模式:懶漢式的特點是延遲加載,比如配置文件,采用懶漢式的方法,顧名思義,懶漢么,很懶的,配置文件的實例直到用到的時候才會加載。
class SiglenTon{public:  static SiglenTon *GetInstence()  {    if( p == NULL)    {      p = new SiglenTon();    }    return p;  }private:  SiglenTon()  {    cout<<"SiglenTon()"<<endl;  }  static SiglenTon *p;};SiglenTon *SiglenTon::p = NULL;int main(){  SiglenTon *p = SiglenTon::GetInstence();  return 0;}(2)第一種方式沒有考慮到線程安全
class SiglenTon //(線程安全的餓漢模式){public:  static SiglenTon *GetInstence()  {    cout<<"static SiglenTon *GetInstence()"<<endl;    pthread_mutex_lock(&mutex);    if( p == NULL)    {      pthread_mutex_lock(&mutex);      p = new SiglenTon();      pthread_mutex_unlock(&mutex);    }    pthread_mutex_unlock(&mutex);    return p;  }private:  SiglenTon()  {    cout<<"SiglenTon()"<<endl;  }  static SiglenTon *p;};SiglenTon *SiglenTon::p = NULL;int main(){  SiglenTon *p = SiglenTon::GetInstence();  SiglenTon *p1 = p->GetInstence();  return 0;}(3)餓漢模式(餓漢模式本身就是線程安全的)
class SiglenTon{public:  SiglenTon *GetInstence()  {    if( p == NULL)    {      return p;    }  }private:  SiglenTon()  {    cout<<"SiglenTon()"<<endl;  }  static SiglenTon *p;};以上就是對C++ 中單例模式的講解,如有疑問請留言或者到本站社區進行交流討論,感謝閱讀,希望幫助到大家,謝謝大家對本站的支持!
新聞熱點
疑難解答
圖片精選