定義:
裝飾器模式(Decorator Pattern) 也稱爲包裝模式(Wrapper Pattern) 是指在不改變原有對象的基礎之上,將功能附加到對象上,提供了比繼承更有彈性的替代方案(擴展原有對象的功能),屬於結構型模式。裝飾器模式的核心是功能擴展,使用裝飾器模式可以透明且動態地擴展類的功能
一、Person接口
public interface Person { void GetRole(); void GetAge(); }
二、定義Father類並實現Person接口
public class Father implements Person { @Override public void GetRole() { System.out.println("role : father"); } @Override public void GetAge() { System.out.println("father age : 38 years"); } }
三、定義Mother類並實現Person接口
public class Mother implements Person { @Override public void GetRole() { System.out.println("role : Mother"); } @Override public void GetAge() { System.out.println("Mother Age : 30 years"); } }
四、定義Son類並實現Person接口
public class Son implements Person{ @Override public void GetRole() { System.out.println("son Age : 10 years"); } @Override public void GetAge() { System.out.println("role : son"); } }
五、定義PersonDecorator類並實現Person接口
public class PersonDecorator implements Person{ private Person person; public PersonDecorator(Person person) { this.person = person; } @Override public void GetAge() { person.GetAge(); } @Override public void GetRole() { person.GetRole(); } }
六、定義PersonMaleDecorator類並繼承PersonDecorator
public class PersonMaleDecorator extends PersonDecorator { public PersonMaleDecorator(Person person) { super(person); } @Override public void GetAge() { super.GetAge(); this.SetAddFunction(); } @Override public void GetRole() { super.GetRole(); } // 附加方法 private void SetAddFunction() { System.out.println("this is a addfunction"); } }
七、測試
public class Main { public static void main(String[] args) { Mother mother=new Mother(); PersonMaleDecorator father=new PersonMaleDecorator(new Father()); PersonMaleDecorator son=new PersonMaleDecorator(new Son()); mother.GetRole(); mother.GetAge(); System.out.println("------------------------"); father.GetRole(); father.GetAge(); System.out.println("------------------------"); son.GetRole(); son.GetAge(); System.out.println("------------------------"); } }