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

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

  一般咱們能夠讓一個全局變量使得一個對象被訪問,但它不能防止客戶實例化多個對象,一個最好的辦法就是讓類自身負責保護它的惟一實例,這個類能夠保證沒有其它實例能夠被建立,而且它能夠提供一個訪問該實例的方法。函數

  單例模式由於Singleton類封裝它的惟一實例,這樣它能夠嚴格控制客戶怎樣訪問它以及什麼時候訪問它,簡單地說就是對惟一實例的受控訪問。spa

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

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

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

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

  固然,在對象用多線程時,可能會形成建立多個實例,能夠給建立對象的過程加鎖。class

  • Singleton:定義一個Instance操做

class Singleton{
public:
    static Singleton* Instance();
protected:
    Singleton(){}
    Singleton(const Singleton &instance){}
    Singleton& operator=(const Singleton &instance){}
private:
    static Singleton* instance;
};
Singleton* Singleton::Instance(){
    if(instance == 0)
        instance = new Singleton;
    return instance;
}
Singleton* Singleton::instance = 0;

  其實,單例模式中最關鍵的就是把public的構造函數私有化。這樣就把構造對象的實例化的權利交給了類自己,讓Singleton來控制類的實例化。固然除了構造函數以外,還須要把類的控制複製函數(拷貝構造函數,賦值運算)私有化,由於客戶端沒有構造的權利,因此也就沒有使用控制複製函數的權利。變量

版權全部,歡迎轉載,轉載請註明出處!原理

相關文章
相關標籤/搜索