

//需要被装饰的对象public class Person {private String name;public Person(String name) {super();this.name = name;}public Person() {super();}public void show(){System.out.println("装扮的"+name);}}//功能的抽象类public class Finery extends Person{protected Person component;//打扮public void Decorate(Person component){this.component = component;}@Overridepublic void show(){if(component != null){ component.show();}}}//继承功能类public class BigTrouser extends Finery {@Overridepublic void show(){System.out.println("垮裤");super.show();}}//继承功能类public class TShirts extends Finery {@Overridepublic void show(){System.out.println("大T恤");super.show();}}//继承功能类public class WearSneakers extends Finery {@Overridepublic void show(){System.out.println("破球鞋");super.show();}}//继承功能类public class WearSuit extends Finery{@Overridepublic void show(){System.out.println("西装");super.show();}}//动态给对象添加功能public class Test {public static void main(String[] args) {Person xc = new Person("小菜");System.out.println("第一种装扮:");WearSneakers w = new WearSneakers();WearSuit ws = new WearSuit();BigTrouser bt = new BigTrouser();/* * 首先实例化person对象 * 再用WearSneakers类包装person * 再用WearSuit类来包装WearSneakers对象 * 再用BigTrouser类包装WearSuit对象 * 最终执行BigTrouser的show方法。 * */ w.Decorate(xc); ws.Decorate(w); bt.Decorate(ws); bt.show();}}第一种装扮:垮裤西装破球鞋装扮的小菜什么时候使用装饰模式:往期回顾
设计模式(一) | 啥是工厂模式和策略模式?