设计模式——装饰者模式
来源:互联网 发布:win10右下角网络红叉 编辑:程序博客网 时间:2024/06/06 06:56
3.
OO原则:对扩展开放,对修改关闭
OO模式:装饰者模式——动态地将责任附加到对象上,想要扩展功能,装饰者提供有别于继承的另一种选择。
例子:咖啡店处理咖啡、配料的关系
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 HouseBlend extends Beverage {public HouseBlend() {description = "House Blend Coffee";} public double cost() {return .89;}}
public class DarkRoast extends Beverage {public DarkRoast() {description = "Dark Roast Coffee";} public double cost() {return .99;}}
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();}}
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 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();}}
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());}}
以下是上述类的关系图:
阅读全文
0 0
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 设计模式——装饰者模式
- 【设计模式】——装饰者模式
- linux如何在sublime中输入中文
- C/C++中extern关键字详解
- 20170729学习笔记之异常处理
- ubuntu the system is running in low-graphics mode 解决办法
- BinarySearch-----50. Pow(x, n)
- 设计模式——装饰者模式
- 快速运动的物体穿过目标体的解决办法
- 第一篇博客
- poj 2796 Feel Good
- vscode 快捷键, 插件 资料指南 (持续更新)
- UVALive
- python_jieba分词的使用
- 二维数组
- HTML5 -video和audio的设置