java(26) - 裝飾模式

來源:互聯網
上載者:User

標籤:java

一.裝飾模式:

      1).裝飾模式是以用戶端透明的方式擴充項物件的功能,是以繼承的關係的一個替代解決方案。

        2).裝飾模式以用戶端透明的方式動態給一個對象附加上更多的責任。

        3).裝飾模式可以在不創造更多子類的情況下將對象的功能加以擴充。

       在裝飾模式中的角色:

       a).抽象構件角色(Component):給出一個抽象介面,以規範準備接收附加責任的對象。

       b).具體構件角色(Concrete Component):定義一個將要接收附加責任的類。

       c).裝飾角色(Decorator):持有一個構件(Component)對象的引用,並定義一個與抽象構件介面一致的介面。

       d).具體裝飾角色(Concrete Decorator):負責給構件對象附加責任。

執行個體:

抽象構件角色(Component):

<strong>public interface Component {public void doSomething();}</strong>

具體構件角色(Concrete Component):

public class ConcreteComponent implements Component{@Overridepublic void doSomething() {System.out.println("功能A");}}

裝飾角色(Decorator):

public class Decorator implements Component{public Component component;public Decorator(Component component){this.component = component;}@Overridepublic void doSomething() {// TODO Auto-generated method stubcomponent.doSomething();}}

具體裝飾角色(Concrete Decorator):

public class ConcreteDecorator1 extends Decorator{public ConcreteDecorator1(Component component) {super(component);}public void doSomething(){super.doSomething();this.doAnotherThing();}public void doAnotherThing(){System.out.println("附加功能B");}}
public class ConcreteDecorator2 extends Decorator{public ConcreteDecorator2(Component component) {super(component);}public void doSomething(){super.doSomething();this.doAnotherThing();}public void doAnotherThing(){System.out.println("附加功能C");}}

附加兩個功能。

測試類別:

public class Test {public static void main(String[] args) {//這就是io中節點流被過濾流封裝Component com = new ConcreteDecorator2(new ConcreteDecorator1(new ConcreteComponent()));com.doSomething();}}

列印:

功能A
附加功能B
附加功能C


二.裝飾模式的特點:

裝飾模式在io流中是經常是用的模式,裝飾模式的特點:1).裝飾模式和真實對象有相同的介面。這樣用戶端對象就可以以和真實對象相同的方式和裝飾對象互動。2).裝飾對象包含一個真實對象的引用。3).裝飾對象接收所有來自用戶端的請求,它把這些請求轉寄給真實的對象。4).裝飾對象可以在轉寄這些請求以前或以後增加一些附加功能,這樣就確保了在運行時,不用修改給定對象的結構就可以在外部增加附加的功能,在面對對象的設計中,通常是通過繼承來實現對給定功能的擴充。


    



java(26) - 裝飾模式

相關文章

聯繫我們

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