程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 淺談C++設計模式之單例模式

淺談C++設計模式之單例模式

編輯:C++入門知識

淺談C++設計模式之單例模式


單例模式:保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。

通常我們可以讓一個全局變量使得一個對象被訪問,但它不能防止客戶實例化多個對象,一個最好的辦法就是讓類自身負責保護它的唯一實例,這個類可以保證沒有其它實例可以被創建,並且它可以提供一個訪問該實例的方法。

單例模式因為Singleton類封裝它的唯一實例,這樣它可以嚴格控制客戶怎樣訪問它以及何時訪問它,簡單地說就是對唯一實例的受控訪問。

實現原理:將構造函數私有化,只提供一個靜態方法來創建一個對象。

(1) 將構造函數設置成private;

(2) 聲明一個靜態的字段,初始化一個實例,返回Singleton對象;

(3) 用靜態方法或靜態屬性,返回那個唯一的實例

當然,在對象用多線程時,可能會造成創建多個實例,可以給創建對象的過程加鎖。

  • Singleton:定義一個Instance操作

  1. class Singleton{ 
  2. public: 
  3.     static Singleton* Instance(); 
  4. protected: 
  5.     Singleton(){} 
  6.     Singleton(const Singleton &instance){} 
  7.     Singleton& operator=(const Singleton &instance){} 
  8. private: 
  9.     static Singleton* instance; 
  10. }; 
  11. Singleton* Singleton::Instance(){ 
  12.     if(instance == 0) 
  13.         instance = new Singleton; 
  14.     return instance; 
  15. Singleton* Singleton::instance = 0; 

其實,單例模式中最關鍵的就是把public的構造函數私有化。這樣就把構造對象的實例化的權利交給了類本身,讓Singleton來控制類的 實例化。當然除了構造函數之外,還需要把類的控制復制函數拷貝構造函數,賦值運算)私有化,因為客戶端沒有構造的權利,所以也就沒有使用控制復制函數的 權利。



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved