1. 程式人生 > >Java設計模式之20 —— 裝飾模式(2)

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恤 穿牛仔