《Head First 设计模式》之装饰者模式
2016-09-29 22:38
411 查看
作者:Grey
原文地址:http://www.cnblogs.com/greyzeng/p/5922248.html
装饰者模式(Decorator Pattern)
定义咖啡厅中的每一类咖啡,并且计算其价格。每类咖啡都可以增加配料,价钱会根据不同配料而改变。
每类咖啡继承这个抽象类,实现自己的
Espresso咖啡:
HouseBlend咖啡:
在这里,配料(
具体配料继承这个装饰者,并包含一个
测试代码:
输出结果:
完整代码: Decorator Pattern Source
原文地址:http://www.cnblogs.com/greyzeng/p/5922248.html
模式名称
装饰者模式(Decorator Pattern)
需求
定义咖啡厅中的每一类咖啡,并且计算其价格。每类咖啡都可以增加配料,价钱会根据不同配料而改变。
解决方案
定义一个Beverage抽象类,用来表示饮料:
public abstract class Beverage { public String description = "Unknown Description"; public String getDescription() { return description; } public abstract double cost(); }
每类咖啡继承这个抽象类,实现自己的
cost()方法,
Espresso咖啡:
public class Espresso extends Beverage { Espresso() { description = "Espresso"; } @Override public double cost() { return 1.99d; } }
HouseBlend咖啡:
public class HouseBlend extends Beverage { HouseBlend() { description = "HouseBlend"; } @Override public double cost() { return .99d; } }
在这里,配料(
CondimentDecorator)作为装饰者,也继承自
Beverage类,是一个抽象类:
public abstract class CondimentDecorator extends Beverage { public abstract String getDescription(); }
具体配料继承这个装饰者,并包含一个
Beverage类的引用,这个引用类就是要装饰的对象:
public class Mocha extends CondimentDecorator{ private Beverage beverage; Mocha(Beverage beverage) { this.beverage = beverage; } @Override public double cost() { return .2d+beverage.cost(); } @Override public String getDescription() { return beverage.getDescription()+", Mocha"; } }
测试代码:
public class CoffeeTest { public static void main(String[] args) { Beverage beverage = new Espresso(); System.out.println("Espresso cost : "+ beverage.cost() + " description:"+beverage.getDescription()); Beverage beverage1 = new HouseBlend(); beverage1 = new Mocha(beverage1); // HouseBlend 加一份mocha beverage1 = new Mocha(beverage1); // HouseBlend 再加一份mocha System.out.println("HouseBlend cost:"+beverage1.cost() + " description:"+beverage1.getDescription()); } }
输出结果:
Espresso cost : 1.99 description:Espresso HouseBlend cost:1.39 description:HouseBlend, Mocha, Mocha
完整代码: Decorator Pattern Source
相关文章推荐
- 《Head First 设计模式》阅读笔记(三)——装饰者模式
- head first 设计模式学习随笔(3)----装饰者模式
- 《Head First 设计模式》学习笔记——观察者模式 + 装饰者模式
- (Head First 设计模式)学习笔记(3) --装饰者模式(StarBuzz咖啡店实例)
- 《head first 设计模式》day three 装饰者模式
- Head First 设计模式——装饰者模式(Decorator Pattern)
- Head First-设计模式:装饰者模式
- 《Head First-设计模式》--装饰者模式C++实现
- (Head First 设计模式)学习笔记(3) --装饰者模式(StarBuzz咖啡店实例)
- Head First 设计模式 读书摘记(四) 装饰者模式 C#代码
- 《Head First 设计模式》学习笔记:装饰者模式
- Head First 设计模式(3):装饰者模式
- Head First--设计模式(装饰者模式)
- Head First 设计模式学习笔记——装饰者模式
- Head First 设计模式 (三) 装饰者模式(decorator pattern) C++实现
- 《Head First 设计模式》装饰者模式
- <Head First 设计模式>:装饰者模式--Beverage
- 学习head first 设计模式之装饰者模式
- 3.装饰者模式(Head First 设计模式复习笔记)
- 《Head First 设计模式》阅读笔记(三)——装饰者模式