單例模式

單例模式

單例模式也叫單件模式,在單例模式中,構造函數應該在private中,限制只能在類內創建對象。

1. 單例類保證全局只有一個唯一實例對象。

2. 單例類提供獲取這個唯一實例的接口。

實現單例模式的思路:一個類能返回對象一個引用(永遠是一個)和一個獲得該實例的方法(必須是靜態方法),構造函數爲私有的,其它初的代碼就無法通過類的構造函數來實例化類的對象,只能通過類提供的靜態方法獲得類的唯一實例。

下面是一個簡單的單例類:

不考慮線程安全的一個單例類

class Singleton
{
public:
    // 獲取唯一對象實例的接口函數
    static Singleton* GetInstance()
    {
        if (_sInstance ==NULL)
        {
            _sInstance = new Singleton();
        }
        return _sInstance;
    }
    // 刪除實例對象
    staticvoid DelInstance()
    {
        if (_sInstance)
        {
            delete _sInstance;
            _sInstance =NULL;
        }
    }
    void Print()
    {
        cout<<_data<<endl;
    }
private:
    // 構造函數定義爲私有,限制只能在類內創建對象
    Singleton()
        :_data(0)
        {}
    Singleton(const Singleton&);
    Singleton&operator=(const Singleton&);
    // 指向實例的指針定義爲靜態私有,這樣定義靜態成員函數獲取對象實例
    static Singleton*_sInstance;
    // 單例類裏面的數據
    int _data;
};
Singleton* Singleton::_sInstance =NULL;
void TestSingleton()
{
    Singleton::GetInstance()->Print();
    Singleton::DelInstance();
}

優點:1、在單例模式中,活動的單例只有一個實例,對單例類的所有實例化都得到相同的一個實例,防止其他對象對自己的實例化,確保所有對象都訪問一個實例。

2、由於系統內存中只存放一個對象,因此可以節約系統資源,當需要頻繁創建和銷燬對象時,單例模式可以提供系統性能。

3、避免對共享資源的多重佔用。

缺點:1、不適用與多變的對象,如果同一類型的對象總是在不同的用例場景發生變化,單例就會引起數據的錯誤,不能保存彼此的狀態。

2、由於單例模式沒有抽象層,因此單例類的擴展有很大困難。

3、如果實例化的對象長時間不能被利用,系統會認爲是垃圾而被回收,這將導致對象狀態的丟失。

單例模式的使用場景:

1、資源共享的境況下,避免由於資源操作時導致的性能或損耗等。

2、控制資源的情況下,方便資源之間的互相通信。

應用場景舉例:

打印機;Windows的TaskMangage(任務管理器);Windows的RecycleBin(回收站);網站的計數器;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章