java设计模式学习之装饰者模式
2015-07-24 22:52
726 查看
设计原则
1.类应该对扩展开放,对修改关闭装饰者模式
动态的将责任加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案1.装饰者和被装饰者对象有相同的超类型
2.对象可以在任何时候被装饰
1编写装饰者和被装饰者的超类型
package decorator; /** * 饮料 */ public abstract class Beverage { String description = "未知的饮料"; public String getDescription() { return description; } public abstract double cost(); }
2.调料的抽象类(调料)
package decorator; /** *调料 */ public abstract class CondimentDecorator extends Beverage{ public abstract String getDescription(); }
3.饮料的代码
package decorator; public class HouseBlend extends Beverage{ public HouseBlend() { description = "我是混合咖啡"; } @Override public double cost() { return 0.99; } }
package decorator; /** * 浓缩咖啡 */ public class Espresso extends Beverage{ public Espresso () { description = "我是浓缩咖啡"; } @Override public double cost() { return 1.99; } }
4.实现具体的装饰者(具体的调料)
package decorator; /** * 摩卡调料 */ public class Mocha extends CondimentDecorator{ Beverage beverage; public Mocha(Beverage beverage) { this.beverage = beverage; } @Override public String getDescription() { return beverage.getDescription() + "摩卡调料"; } @Override public double cost() { return beverage.cost() + 0.20; } }
5.测试代码
package decorator; public class test { public static void main(String[] args) { Beverage beverage = new Espresso(); System.out.println(beverage.getDescription()+beverage.cost()); Beverage beverage4 = new HouseBlend(); System.err.println(beverage4.getDescription()+beverage4.cost()); Beverage beverage2 = new Espresso(); beverage2 = new Mocha(beverage2); System.out.println(beverage2.getDescription()+beverage2.cost()); Beverage beverage3 = new HouseBlend(); beverage3 = new Mocha(beverage3); System.out.println(beverage3.getDescription()+beverage3.cost()); } }
我是浓缩咖啡1.99
我是混合咖啡0.99
我是浓缩咖啡摩卡调料2.19
我是混合咖啡摩卡调料1.19
相关文章推荐
- java 二分查找实现
- java找jar包、搜索class类 搜索maven
- 关于Java中继承和接口的理解
- Java: Class Variable/Static Variable
- Java: Class Variable/Static Variable
- mybitis利用association 实现延迟加载
- Google Java编程风格指南
- 06_在web项目中集成Spring
- java快速排序实现
- 03_Spring工厂接口
- 02_Spring控制反转案例快速入门
- 01_Spring概述
- Socket笔记(第二弹:Java Socket通信的基本实现)
- java内存泄露补充例子
- Java并发编程:线程池的使用
- java多线程学习笔记(2)——中断线程
- Java与C#的语法区别(不断更新中...)
- 定义构造方法的程序.java
- Java错误提示--------Only a type can be imported. java.awt.event resolves to a package
- Java利用POI导入导出Excel中的数据