《大话设计模式》java实现之装饰器模式
2017-11-13 10:34
731 查看
Decorator模式个人觉得应该翻译装饰器模式,书中用了装饰模式,个人习惯吧
UML图
代码结构
注:注释中先写了super,书中在最后写super,主要是顺序的问题
其实java中有一个经典的装饰器模式,就是IO流,换一种实现方法就可以体现了,改后的代码如下:
主要关注Client中初始化的写法,new xxx(new xxx)这种写法就与java的IO流的写法一致。
装饰器模式主要是可以体现装饰的过程,就像前面中写的http://blog.csdn.net/linlinxie/article/details/78455946
UML图
代码结构
public class BigTrouser extends Finery { @Override public void show() { super.show(); //书中装饰顺序反过来了,所以这里先写super可以使得顺序的正确 System.out.println("垮裤"); } }
public class Client { public static void main(String[] args) { Person xc = new Person("小菜"); System.out.println("第一种装扮"); BigTrouser kk = new BigTrouser(); Tshirts dtx = new Tshirts(); kk.decorate(xc); dtx.decorate(kk); //这两步体现了装饰的过程,与书中不使用模式的代码对比 dtx.show(); } }
public class Finery extends Person { private Person component; @Override public void show() { if(component != null) { component.show(); } } public void decorate(Person component) { this.component = component; } }
public class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Person(String name) { super(); this.name = name; } public Person() { super(); } public void show() { System.out.println("装扮的" + name); } }
public class Tshirts extends Finery { @Override public void show() { super.show(); //书中装饰顺序反过来了,所以这里先写super可以使得顺序的正确 System.out.println("大T恤"); } }
注:注释中先写了super,书中在最后写super,主要是顺序的问题
其实java中有一个经典的装饰器模式,就是IO流,换一种实现方法就可以体现了,改后的代码如下:
public class BigTrouser extends Finery { public BigTrouser(Person person) { super(person); } @Override public void show() { super.show(); System.out.println("垮裤"); } }
public class Client { public static void main(String[] args) { Person person = new Person("小菜"); Finery finery = new TShirts(new BigTrouser(person)); //初始化时一层包一层,典型的java流的写法 finery.show(); } }
public abstract class Finery extends Person { private Person person; public Finery(Person person) { this.person = person; } @Override public void show() { person.show(); } }
public class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Person(String name) { super(); this.name = name; } public Person() { super(); } public void show() { System.out.println("装扮的" + name); } }
public class TShirts extends Finery { public TShirts(Person person) { super(person); } @Override public void show() { super.show(); System.out.println("T恤"); } }
主要关注Client中初始化的写法,new xxx(new xxx)这种写法就与java的IO流的写法一致。
装饰器模式主要是可以体现装饰的过程,就像前面中写的http://blog.csdn.net/linlinxie/article/details/78455946
相关文章推荐
- 大话设计模式3 装饰模式 的java代码实现
- 《大话设计模式》读书笔记:策略模式+反射的Java实现
- 大话设计模式之Python实现【装饰模式】
- 大话设计模式之装饰模式代码实现-OC版
- 大话设计模式之状态模式(java版实现)
- 大话设计模式4 代理模式 的java代码实现
- java装饰着模式实现--字符小写输出
- 大话设计模式之外观模式(Java版实现) 买股票还是买基金在此揭晓
- 大话设计模式--java实现策略模式
- Java语言实现的装饰设计模式复习
- 《大话设计模式》java实现之策略模式
- 《大话设计模式》之 装饰模式 Delphi实现
- 设计模式之装饰模式Java实现
- 大话设计模式之模板方法模式(Java版实现)考生做试卷问题
- 设计模式之装饰模式(Java实现)
- Java函数接口实现函数组合及装饰器模式
- 大话设计模式1 简单工厂模式 的java代码实现
- 大话设计模式java版本 第六章 装饰模式
- 大话设计模式2 策略模式 的java代码实现
- 《大话设计模式》读书笔记:策略模式+反射的Java实现