設計模式學習(一)—— 四要素以及Singleton

設計模式嚴格來說並不屬於計算機科學的範圍,而屬於軟件工程的範圍。軟件工程中的很多術語都是從建築工程中借鑑而來,模式同樣也是。模式的範圍很廣,不過一般從技術層面上說的設計模式,指的都是“類”一級的設計模式。

一、設計模式的四個基本要素
1、名稱。
2、要解決的問題(或者說應用場景)。
3、解決方案。
4、應用後的效果。


二、模式:Singleton
名稱:

        Singleton,中文有譯作“單粒”或者“單件”,但個人感覺都是怪怪的,按着這個寫法的普通譯法,好像說成“單子”也好,不過總之不大好聽。
要解決的問題:

       存在一個類,在整個系統中只允許此類只有一個對象。比如說當建立一個數據庫操作類,用於總管所有的數據庫操作,那麼此時可能不希望這個類擁有多個對象而產生干擾。
解決方式:
    1、構造方法私有化。
    2、提供靜態共有方法以獲取此類的唯一實例。
    以下代碼大概提供一個方案:
    class Singleton
    {
    private:
        static Singleton *singleton;//唯一對象聲明
        Singleton();
    public:
        static Singleton* GetSingleton();//獲取唯一對象
    }

    SIngleton* singleton = new Singleton();//唯一對象的初始化
應用後的效果:
    1、很明顯,解決了我們所要解決的問題,在此實現之下,無法構建除了唯一對象以外的新對象。
    2、每一個模式基本都會帶來一些副作用,在此實現之下,因爲構造函數的私有化,這個類無法引申更多子類,即使將構造函數申明爲protected,由於存在靜態私有對象,子類仍然無法當成父類來使用。
    3、一個類的靜態成員具有明顯的全局性,使用的時候需要更多小心。
    4、在工具類中的使用:當設計一個工具類時,如果希望此工具類從其他類繼承一些方法(自然不會是靜態方法),那麼可以通過將此工具類做成一個Singleton, 從而可以通過此工具類的唯一實例來調用工具類中的非靜態方法。

ps. 因爲singleton的簡單性,使得singleton很容易被濫用,然而由於singleton所帶來的副作用(效果2、3),良好的開發中使用singleton的越來越少。請關注設計的真正需求,注意應用場景。


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