Headfirst-3 装饰者模式
来源:互联网 发布:gis软件应用 教学大纲 编辑:程序博客网 时间:2024/04/30 20:22
1 Headfirst-3 装饰者模式
定义:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。
1.1 模式设计原则
对扩展开放,对修改关闭
1.2 例子类图
1.1 例子代码
1 Beverage.java
package beverage;
public abstract class Beverage {
String description = "Unknown Beverage";
public String getDescription() {
return description;
}
public abstract double cost();
}
2 CondimentDecorator.java
package beverage;
public abstract class CondimentDecorator extends Beverage {
public abstract String getDescription();
}
3 Espresso.java
package beverage;
public class Espresso extends Beverage {
public Espresso() {
description = "Espresso";
}
public double cost() {
return 1.99;
}
}
4 DarkRoast.java
package beverage;
public class DarkRoast extends Beverage {
public DarkRoast() {
description = "Dark Roast Coffee";
}
public double cost() {
return .99;
}
}
5 HouseBlend.java
package beverage;
public class HouseBlend extends Beverage {
public HouseBlend() {
description = "House Blend Coffee";
}
public double cost() {
return .89;
}
}
6 Mocha.java
package beverage;
public class Mocha extends CondimentDecorator {
Beverage beverage;
public Mocha(Beverage beverage) {
this.beverage = beverage;
}
public String getDescription() {
return beverage.getDescription() + ", Mocha";
}
public double cost() {
return .20 + beverage.cost();
}
}
7 Soy.java
package beverage;
public class Soy extends CondimentDecorator {
Beverage beverage;
public Soy(Beverage beverage) {
this.beverage = beverage;
}
public String getDescription() {
return beverage.getDescription() + ", Soy";
}
public double cost() {
return .15 + beverage.cost();
}
}
8 Whip.java
package beverage;
public class Whip extends CondimentDecorator {
Beverage beverage;
public Whip(Beverage beverage) {
this.beverage = beverage;
}
public String getDescription() {
return beverage.getDescription() + ", Whip";
}
public double cost() {
return .10 + beverage.cost();
}
}
9 StarbuzzCoffee.java
package beverage;
public class StarbuzzCoffee {
public static void main(String args[]) {
Beverage beverage = new Espresso();
System.out.println(beverage.getDescription()
+ " $" + beverage.cost());
Beverage beverage2 = new DarkRoast();
beverage2 = new Mocha(beverage2);
beverage2 = new Mocha(beverage2);
beverage2 = new Whip(beverage2);
System.out.println(beverage2.getDescription()
+ " $" + beverage2.cost());
Beverage beverage3 = new HouseBlend();
beverage3 = new Soy(beverage3);
beverage3 = new Mocha(beverage3);
beverage3 = new Whip(beverage3);
System.out.println(beverage3.getDescription()
+ " $" + beverage3.cost());
}
}
- Headfirst-3 装饰者模式
- HeadFirst 设计模式 3装饰者模式 (饮料问题)
- 《HeadFirst设计模式》读书笔记-第3章-装饰者模式
- HeadFirst设计模式之装饰者模式
- 【HeadFirst设计模式】装饰者模式
- HeadFirst 设计模式- 装饰者模式
- HeadFirst design pattern笔记-装饰者模式
- HeadFirst学习之装饰者模式
- HeadFirst设计模式读书笔记--装饰者模式(三)
- 《HeadFirst设计模式》学习笔记2-装饰者模式
- 调侃《HeadFirst设计模式》之装饰者模式
- HeadFirst设计模式_读书笔记_003_装饰者模式
- HeadFirst 设计模式学习笔记3--装饰模式
- HeadFirst 设计模式学习笔记3--装饰模式
- HeadFirst 设计模式学习笔记3--装饰模式
- 【读书笔记】HeadFirst设计模式——代理和装饰者
- 《HeadFirst设计模式》书摘-装饰者模式/抽象工厂模式/工厂方法模式
- 【设计模式】HeadFirst设计模式(三):装饰者(Decorator)模式
- win32application与win32 console applicationd的区别
- PHP常用正则表达式
- Compass 入门指南
- ASP中recordset所有的属性与方法
- 最大黑区域
- Headfirst-3 装饰者模式
- 读书随笔一则
- 环境变量和各种路径的添加
- 编译安装ibus输入法
- C4TAT2
- redhat 中文乱码解决方法
- javascript设计模式_第二部分_装饰者模式
- linux route 命令
- 类和枚举的对应方法(重构)