標籤: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) - 裝飾模式