Head first笔记三:装饰者模式
2015-12-26 20:30
295 查看
星巴克例子
继承是属于扩展形式之一, 但不见得是达到弹性设计的最佳方式。
组合和委托可用于在运行时动态地加上新的行为。
除了继承,装饰者模式也可以让我们扩展行为。
Headfirst Java代码:
public abstract class Beverage { String description = “Unknown Beverage”; public String getDescription() { return description; } public abstract double cost(); } public abstract class CondimentDecorator extends Beverage { public abstract String getDescription(); } public class Espresso extends Beverage { public Espresso() { description = “Espresso”; } public double cost() { return 1.99; } } public class HouseBlend extends Beverage { public HouseBlend() { description = “House Blend Coffee”; } public double cost() { return .89; } } 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(); } } 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()); } }
相关文章推荐
- CMake安装和使用 http://blog.sina.com.cn/s/blog_5aee9eaf0100y36u.html
- 汽车牌照识别程序
- cmake 学习笔记(一)http://blog.csdn.net/dbzhang800/article/details/6314073
- 二叉树前序中序求后序
- 不同位数的操作系统数据类型所占字节
- Ubuntu14.04 快速配置 nodejs
- PAT 1006. 换个格式输出整数 (15)
- Python 网络编程 SocketServer
- cas入门:https形式发布cas证书制作
- CMake 使用方法 http://www.cnblogs.com/lyq105/archive/2010/12/03/1895067.html
- 递归算法详细分析--C
- 【郑轻】[1802]SC借水
- HDU 1241 Oil Deposits(油藏)
- Calendar 自定义日历控件
- zookeeper集群搭建
- 搭建一个简单的Struts2框架
- webService是什么
- 【LVL1_5_c】【课后练习】【7】自己造一个strlen()函数,求字符串的长度
- mysqlbinlog解析的几篇经典文章
- 算法设计题2.30-线性表-第2章-《数据结构习题集》-严蔚敏吴伟民版