如果说继承实体是为了扩展实体的属性,以我的角度理解装饰模式就是为了扩展父类的方法!可能是笔者理解的不够深刻,感觉和代理模式有些相近!
大话设计模式-类图
大话设计模式中demo不是java代码,这里我翻译成java代码。
/** * Component 和 ConcreteCmponent */ public class Person { private String name; public Person() {} public Person(String name) { this.name = name; } public void show() { } }
/** * Decorator */ public class Finery extends Person { private Person person; public void setPerson(Person person) { this.person = person; } @Override public void show() { if (null != person) { person.show(); } } }
/** * 具体装饰对象 */ public class TShirts extends Finery { @Override public void show() { super.show(); System.out.print("T恤 "); } }
/** * 具体装饰对象 */ public class BigTrouser extends Finery { @Override public void show() { System.out.println("垮裤 "); super.show(); } }
/** * 客户端 */ public class Test { public static void main(String[] args) { Person person = new Person("小菜"); TShirts ts = new TShirts(); BigTrouser big = new BigTrouser(); ts.setPerson(person); big.setPerson(ts); big.show(); } }
如果理解的有偏差!可以留言给笔者!
以上,希望能帮助学习的童鞋理解装饰模式!