1. 程式人生 > >設計模式學習總結:單例模式(Singleton)

設計模式學習總結:單例模式(Singleton)

意圖

保證類只有一個例項,並提供一個訪問它的全域性訪問點。

適用性

  1. 當類只能有一個例項而且客戶可以通過一個眾所周知的訪問點訪問它時。
  2. 當這個唯一例項應該是通過子類可擴充套件時

結構

這裡寫圖片描述

優缺點

優點

1>對唯一例項的受控訪問。因為singleton類封裝了它的唯一例項,所以它可以嚴格控制客戶怎樣以及何時訪問它。
2>縮小名空間。singleton是對全域性變數的一種改進,它避免了那些儲存唯一例項的全域性變數汙染名空間。
3>允許對操作和表示的精化。singleton可以有子類,並且用這個擴充套件類的例項來配置一個應用是很容易的。
4>允許可變數目的例項。你可以用相同的方法來控制應用應有的例項數量,而不僅限於單例。

缺點

1>實際使用時可能有執行緒不安全的隱患存在。

實現

1>保證一個唯一的例項。常見的實現方法如下。

class Singleton 
{
public:
    //靜態函式
    static Singleton *getInstance();    
protected:
    //隱藏建構函式
    Singleton();
private:
    static Singleton *_instance = nullptr;
}
Singleton *Singleton::_instance = nullptr;
Singleton *SingleTon::getInstance()
{
    //延時初始化
if(_instance == nullptr) _instance = new Singleton(); return _instance; }

2> 建立singleton的子類

例項