天天看點

單件 singleton pattern c++

                                                                                singleton pattern

意圖: 保證一個類僅有一個執行個體,并提供一個通路它的全局通路點。

現實中的問題:

        汽車制造為例,很多不同的汽車型号使用相同的子構件,包括基本部件(車燈,雨刮,輪胎等)這些通用的功能,部件。

效果: 

使用某種方法來控制如何建立類執行個體,然後確定在任何給定的時間隻建立一個類執行個體。 這會确切地給我們提供所需的行為,

并使用戶端不必了解任何類細節。

                                 GOF原型

單件 singleton pattern c++

C++實作:

class Singleton
{
private:
    Singleton(){} //這裡需要特别注意,其他的構造函數
    Singleton(const Singleton & sg){} //拷貝構造
    Singleton operator=(const Singleton & sg){}
    ~Singleton(){}
public:
    static Singleton* Instance()
    {
     //檢查成員變量是否已初始化,如果沒有的話,則建立一個新執行個體。
      if(pSelf == NULL)// 惰性初始化
          pSelf= new Singleton();
      return pSelf;
    }
 private:
    static Singleton* pSelf;
}      
class Singleton
{
private:
    Singleton(){} //這裡需要特别注意,其他的構造函數
    Singleton(const Singleton & sg){} //拷貝構造
    Singleton operator=(const Singleton & sg){}
    ~Singleton(){}
public:
    static Singleton* Instance()
    {
     //檢查成員變量是否已初始化,如果沒有的話,則建立一個新執行個體。
     //多個線程同時執行的話不能達到隻建立一個執行個體的目的。
      同步{  //如果同步的話考慮同步帶來的效率問題 --- 雙重檢驗鎖定
      if(pSelf == NULL) //這裡是判斷是否已經建立了單例,不至于每次都要加鎖
      {
        lock();
        if(pSelf == NULL)// 惰性初始化
          pSelf= new Singleton();
        unlock();
      }
      return pSelf;
    }
 private:
    static Singleton* pSelf;
}      
class Singleten
{
private:
    Singleton(){} //這裡需要特别注意,其他的構造函數
    Singleton(const Singleton & sg){} //拷貝構造
    Singleton operator=(const Singleton & sg){}
    ~Singleten();
public:
  static Singleten * GetInstance()
  {
    static Singleten gSingleten;
    return &gSingleten;
  }
}      

繼續閱讀