設計模式之—單件模式

來源:互聯網
上載者:User

一、模式定義

    保證一個類僅有一個執行個體,並提供一個訪問它的全域訪問點。

 

二、所體現出的設計原則

    這裡重新歸納一下軟體設計中的幾個原則:

    1.OCP法則:開閉法則(Open-Closed Principle)一個軟體系統應當對擴充開放,對修改關閉。
    描述:通過擴充已有軟體系統,可以提供新的行為,以滿足對軟體的新的需求,使變化中的軟體有一定的適應性和靈活性。同時已有軟體模組,特別是最重要的抽象層模組不能再修改,這使變化中的軟體系統有一定的穩定性和延續性。
    實現原則:把抽象介面和實現分離。

    2.LSP法則: Liskov Substitution Principle(裡氏代換原則)
    描述:這是繼承的特徵,子類型(subtype)必須能夠替換它們的基底類型。

    3.DIP法則: 依賴倒置(Dependence Inversion Principle)
    表述:抽象不應當依賴於細節;細節應當依賴於抽象;要針對介面編程,不針對實現編程。具體講就是 要依賴於抽象,不要依賴於具體。
    實現原則:傳遞參數時,或者在組合彙總關係中,盡量引用層次高的類。

    4.ISP原則:介面隔離原則(Interface Segregation Principle)
    描述:每一個介面應該是一種角色,不多不少,不幹不該乾的事,該乾的事都要幹。這類似編碼原則中的最小許可權法則。

    5.CARP法則: 合成/彙總複用原則(Composite/Aggregate Reuse Principle或CARP)也叫做合成複用(CRP)原則(Composite Reuse Principle
    描述:要盡量使用合成/彙總,盡量不要使用繼承。這就是has a和is a的的問題

    6. 迪米特法則(LoD)迪米特法則(Law of Demeter或簡寫LoD)又叫最少知識原則(Least Knowledge Principle或簡寫為LKP)
    描述:一個對象應當對其它對象有儘可能少的瞭解。其它表述:這實際上就是設計高內聚低耦合的要求,有人形象地稱謂“不要和陌生人講話”。

    似乎找不到單件模式符合的哪一項,>_< 

 

三、UML圖示

        簡單反而畫不出來了。。。        

 

四、應用情境

       單件模式常用來代表系統中的某種唯一的資源,比如說檔案系統,資源管理員等等。

 

五、注意事項

          單件模式有幾種實現,比如說:直接將本對象的引用定義成static final類型,然後在全域唯一提供者中返回此引用。

          private static final  MySingleton _instance = new MySingleton();

          public  MySingleton getinstance() {

                return _instance;

          }

       這種寫法簡單易記,並且沒有安全執行緒的問題。但缺點是不能繼承。

       還有一種做法可以滿足繼承的需要:全域統一提供者仍在父類中定義,同時父類中維護一張映射表,key為子類名稱,value為子類執行個體的引用。

       但我覺得單件模式還是不要繼承的好,繼承單例總感覺不對勁。

 

六、舉例說明

       比如說做一個FTP工具,需要設計一個FTP Session的管理者對象,來實現諸如FTP Session的建立,銷毀,儲存等等。此時這個管理者對象就是全域唯一的訪問FTP Session的點,所以設計成單件模式就比較適合了。

 

七、程式碼範例

      維基百科:http://zh.wikipedia.org/wiki/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.