Java設計模式——裝飾器模式(Decorator)__java

來源:互聯網
上載者:User

孫悟空有七十二般變化,他的每一種變化都給他帶來一種附加本領。而不管孫悟空怎麼變化在二郎神眼裡,他永遠是那隻猢猻。
裝飾器模式以對客戶透明的方式動態給一個對象附加上更多的責任。
在孫悟空的例子裡,老孫變成的魚兒相當於老孫的子類。
裝飾模式的類圖如下:

裝飾模式的角色介紹:
抽象構件角色(ComponentDec):給出一個抽象介面,以規範準備接收附加責任的對象
具體構件(Concrete ComponentDec):定義一個將要接收附加責任的類
裝飾角色(Decortor):持有一個構件對象的執行個體,並頂一個與抽象構件介面一致的介面
具體裝飾(Concrete Decorator):負責給構件對象“貼上”附加的責任

public interface Component {    void simpleOperation();} public class Decorator implements Component {    private Component component;    public Decorator(Component component) {        super();        this.component = component;    }    public Decorator() {        super();    }    /**     * 商業方法,委派給構件     */    public void simpleOperation() {        component.simpleOperation();    }}

1、上面的修飾類中有一個私人的屬性Component,其資料類型是構件類型
2、此裝飾類實現了構件介面
3、介面的實現方法也值得注意,每一個實現的方法都委派給父類,當並不是單純的委派,而是有功能的增強。
雖然Decorator類不是一個抽象類別,但是由於他的功能是一個抽象角色,因此也常常稱它為抽象修飾。

public class ConcreteComponent implements Component {    public ConcreteComponent() {        super();    }    /**     * 商業方法     */    public void simpleOperation() {    }} public class ConcreteDecorator extends Decorator {    public void simpleOperation(){        super.simpleOperation();    }}

齊天大聖的例子:
Component的角色便是大名鼎鼎的齊天大聖孫悟空扮演的;ConcreteComponent的角色屬於大聖的本尊,就是猢猻本人;大聖的72變便是Decorator角色;而ConcreteDecorator便是花、鳥、魚、蟲等72般變化。

裝飾模式應該在什麼情況下使用。
1、需要擴充一個類的功能,或給一個類增加附加功能
2、需要動態給一個對象增加功能,這些功能可以再動態撤銷
3、需要增加由一些準系統的排列組合而產生的非常大量的功能,從而使得繼承關係不現實
裝飾模式的優缺點
優點:
1、與繼承關係目的都是要擴充項物件的功能,但裝飾模式可以提供比繼承更多的靈活性
裝飾模式允許系統動態決定貼上一個需要的裝飾,或者除掉一個不需要的裝飾。繼承關係則不同,繼承關係是靜態,他在系統運行前就已經決定了。
2、通過使用不同的具體修飾類及這些裝飾類的排列組合,設計師可以創造出很多不同的行為組合。而繼承沒有這個關係優勢。每一種不同的組合均需要事先通過子類繼承的方式設計好。
3、這種比繼承更加靈活機動的特性,也同時意味著裝飾模式比繼承更加容易出錯
缺點
使用裝飾模式會產生比使用繼承關係更多的類。特別是這些類看上去都比較相近

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.