Java設計模式之20 —— 裝飾模式(2)
裝飾模式是一種結構型設計模式。其使用一種對客戶端透明的方式,來動態的擴充套件物件的功能。同時,它也是繼承關係的一種替代方案之一。定義:動態地給一個物件新增一些額外的職責。就增加個來說,裝飾模式比生成子類更為靈活。
所以,我們可以在需要透明而且動態地擴充套件類的功能時,所以裝飾模式。
1 建立一個被裝飾的原始物件,也可以是介面還在抽象類:
package decoratorpattern2;
public abstract class Person { public abstract void dressed(); }
2 建立一個原始裝飾物件的具體類,作為被裝飾的物件:
package decoratorpattern2;
public class Boy extends Person{
@Override public void dressed() { System.out.println("boy穿男裝"); }
}
3 建立裝飾著來裝飾Boy類:
package decoratorpattern2;
public abstract class PersonCloth extends Person{
protected Person person; public PersonCloth(Person person) { super(); this.person = person; }
@Override public void dressed() { person.dressed(); }
}
4 建立裝飾著的具體實現類,來裝飾物件:
package decoratorpattern2;
public class ExpensiveCloth extends PersonCloth{ public ExpensiveCloth(Person person) { super(person); } private void dressShirt(){ System.out.println("穿T恤"); } private void dressJean(){ System.out.println("穿牛仔"); } @Override public void dressed() { super.dressed(); dressShirt(); dressJean(); } }
5 測試執行結果:
package decoratorpattern2;
public class Client {
public static void main(String[] args) { Person person = new Boy(); PersonCloth cheapCloth = new CheapCloth(person); cheapCloth.dressed(); PersonCloth expensiveCloth = new ExpensiveCloth(person); expensiveCloth.dressed(); } }
輸出結果:
boy穿男裝 穿短褲 boy穿男裝 穿T恤 穿牛仔