装饰者模式
来源:互联网 发布:mac双系统win8.1激活 编辑:程序博客网 时间:2024/05/21 22:46
案例:咖啡店想建立生成订单的程序。订单要有咖啡的种类、加的调料种类以及它们的价格。以后可能出现新的调料,有的咖啡不能添加某种调料。
学到的新的原则:对扩展开放,对修改关闭。(本例中用低藕的组合代替了高藕的继承。是对于扩展功能,有别于继承的另一种选择)
装饰者模式:动态的将责任添加到对象上。想要扩展功能,装饰者提供有别于继承的另一种选择。
解决方案:咖啡作为 被装饰者,调料作为装饰者。装饰者将 被装饰者或者 装饰过的被装饰者包(装饰)起来,利用这种组合的方式,为被装饰者提供新功能,避免继承。有多重嵌套的意味。而且也因此,装饰者与被装饰者继承于同一个超类,这样装饰者才能装饰 被装饰过的被装饰者。
public abstract class Beverage {//装饰者和被装饰者共同继承的父类 String description; public String getDescription(){ return description; } public abstract double cost();}public abstract class DecoratorCondiment extends Beverage {//装饰者的父类 Beverage beverage; public abstract String getDescription(); @Override public double cost() { return 0; }}public class Mocha extends DecoratorCondiment { public Mocha(Beverage beverage){//呈现组合关系。传入被装饰者,为其添加新功能 this.beverage = beverage; description = "Mocha"; } public double cost(){ return beverage.cost() + .20; } @Override public String getDescription() { return description + beverage.getDescription(); }}public class Esprreso extends Beverage {//被装饰者 public Esprreso(){ description = "Esprreso"; } @Override public double cost() { return 1.99; }}
阅读全文
0 0
- 装饰者模式(Derector)
- 装饰者模式
- Decorator 装饰者模式
- 装饰者设计模式
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式(Decorator)
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式 DecoratorPattern
- 设计模式 - 装饰者
- 装饰者模式
- 装饰者模式
- 装饰者模式 - 2
- 装饰者模式
- 装饰者模式
- Cas单点登录(整合shiro版本)
- 今天是场景构建的基础元年,大数据不是博眼球而是深耕行业,其与人工智能相结合是未来趋势 | 大咖周语录
- oracle的在sql语句后加for update 不是都起作用的,对于单表是可以的,但是对于多表关联(无论left join还是内连接等)都不能修改
- 谷歌发布最强AI机器人AlphaGo Zero,融360拟融资3亿美元即将赴美上市 | 大数据周周看
- PYTHON SHELL AUTOCOMPLETE CONFIG
- 装饰者模式
- 17101501_CentOS7下卸载openJDK安装Sun公司的JDK
- JSP基础
- source insight 使用
- 关于 setsockopt
- Android Activity嵌套Fragment可以自行修改状态栏字体颜色为黑还是白色
- 数据结构第八周项目三-顺序串算法
- Apache FtpServer
- VC++6.0 MySQL C API接口连接数据库方法