装饰者模式
来源:互联网 发布:手机能做淘宝链接 编辑:程序博客网 时间:2024/05/29 08:09
装饰者模式:动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方式。
下边我们以购买咖啡为例,说明装饰者模式。购买咖啡时,也可以要求在其加入各种调料,例如:摩卡、奶泡。咖啡店根据加入的调料收取不同的费用。
1. 饮料基类
public abstract class AbstractBeverage { String description = "Unknown Beverage"; public String getDescription() { return description; } public abstract double cost();}
2. 浓缩咖啡
public class Espresso extends AbstractBeverage { public Espresso() { description = "Espresso"; } @Override public double cost() { return 1.99; }}
3. 混合饮料
public class HouseBlend extends AbstractBeverage{ public HouseBlend() { description = "HouseBlend"; } @Override public double cost() { return 0.89; }}
4. 装饰者基类
public abstract class CondimentDecorator extends AbstractBeverage{ public abstract String getDescription();}
5. 摩卡调料
public class Mecha extends CondimentDecorator{ private AbstractBeverage beverage; public Mecha(AbstractBeverage beverage) { this.beverage = beverage; } @Override public String getDescription() { return beverage.getDescription() + ", Mocha"; } @Override public double cost() { return 0.20 + beverage.cost(); }}
6. 奶油调料
public class Whip extends CondimentDecorator{ private AbstractBeverage beverage; public Whip(AbstractBeverage beverage) { this.beverage = beverage; } @Override public String getDescription() { return beverage.getDescription() + ", Whip"; } @Override public double cost() { return 0.10 + beverage.cost(); }}
7. 测试
public class DecoratorTest { public static void main(String[] args) { AbstractBeverage espresso = new Espresso(); AbstractBeverage houseBlend = new HouseBlend(); //未加装饰者 System.out.println(espresso.getDescription() + " $" + espresso.cost()); espresso = new Mecha(espresso); espresso = new Mecha(espresso); espresso = new Whip(espresso); System.out.println(espresso.getDescription() + " $" + espresso.cost()); //未加装饰者 System.out.println(houseBlend.getDescription() + " $" + houseBlend.cost()); houseBlend = new Mecha(houseBlend); houseBlend = new Whip(houseBlend); System.out.println(houseBlend.getDescription() + " $" + houseBlend.cost()); }}
8. 运行结果
Espresso $1.99Espresso, Mocha, Mocha, Whip $2.49HouseBlend $0.89HouseBlend, Mocha, Whip $1.1900000000000002
阅读全文
0 0
- 装饰者模式(Derector)
- 装饰者模式
- Decorator 装饰者模式
- 装饰者设计模式
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式(Decorator)
- 装饰者模式
- 装饰者模式
- 装饰者模式
- 装饰者模式 DecoratorPattern
- 设计模式 - 装饰者
- 装饰者模式
- 装饰者模式
- 装饰者模式 - 2
- 装饰者模式
- 装饰者模式
- xamarin学习笔记A13(安卓Handler异步消息处理)
- 乌班图下安装maven
- Redis主从复制
- 数据分析入门书籍,你看过几本
- Python画散点图(Knn中数据)
- 装饰者模式
- C语言Hailstone Sequence雹石序列相关练习
- 音频编码格式的百家争鸣
- php写一个简单的获取点击量的方法
- hdu 3401(单调队列优化dp)
- python:NumPy基础(4),总结
- Android关于buildToolVersion与CompileSdkVersion的区别
- 小鸦
- LeetCode不通过常见原因