Java 装饰模式 (Decorator)
2016-04-08 20:14
513 查看
装饰模式
动态的将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的取代方案代码
package gx.component; /** * 组件:装饰类和被装饰类 都要继承:为了类型保持一致 * @author always * */ public abstract class Component { public abstract void description(); public abstract int cost(); }
package gx.component.impl; import gx.component.Component; /** * 装饰类的抽象类 * @author always * */ public abstract class Decorator extends Component{ protected Component component; }
package gx.component.impl; import gx.component.Component; /** * * 被包装的类 * @author always * */ public class Phone extends Component{ public void description() { System.out.println("裸机"); } public int cost() { return 1900; } }
package gx.decorator.impl; import gx.component.Component; import gx.component.impl.Decorator; /** * * 装饰1:给手机买个壳 * @author always * */ public class DaiKe extends Decorator{ public DaiKe(){ } public DaiKe(Component component){ this.component=component; } public void description() { this.component.description(); System.out.println("带了手机壳"); } public int cost() { return 50+this.component.cost(); } }
package gx.decorator.impl; import gx.component.Component; import gx.component.impl.Decorator; /** * * 装饰2:给手机贴个膜 * @author always * */ public class TieMo extends Decorator{ public TieMo(){} public TieMo(Component component){ this.component=component; } public void description() { this.component.description(); System.out.println("贴了膜"); } public int cost() { return 20+this.component.cost(); } }
測试类:
package gx; import gx.component.Component; import gx.component.impl.Phone; import gx.decorator.impl.DaiKe; import gx.decorator.impl.TieMo; import junit.framework.TestCase; public class TestDecorator extends TestCase { public void testDecorator() { Component component = new TieMo(new DaiKe(new Phone())); component.description(); System.out.println("价钱:" + component.cost()); /* * 结果: * 裸机 * 带了手机壳 * 贴了膜 * 价钱:1970 */ } }
相关文章推荐
- freemarker生成java代码
- SpringMVC实现ajax文件上传
- Java-单机版的书店管理系统(练习设计模块和思想_系列 三 )
- Java-单机版的书店管理系统(练习设计模块和思想_系列 三 )
- java第四次作业
- Java 正则表达式的使用
- Java学习笔记(四)
- java中Collections.sort排序
- [JAVA · 初级]:23.GC-垃圾回收机制
- java汉字中首字母排序
- myeclipse 中如何设置断点 进行调试
- java中的thread类和Runnable类的区别-----总结的很经典
- 第四次Java作业
- MyEclipse XX安装jad反编译插件
- java第四次作业
- Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:5错误
- java线程状态
- 绘制热点图
- Java编写的电梯模拟系统《结对作业》
- 线性表 及Java实现 顺序表、链表、栈、队列