设计模式之装饰者模式
来源:互联网 发布:向量化编程 编辑:程序博客网 时间:2024/06/06 04:37
《Head First设计模式》在装饰者模式的引导语里面说“给爱用继承的人一个全新的设计眼界”,一直是使用继承,在学习了装饰者模式后才发现组合的威力。
装饰者模式:动态的将责任附加到对象上,想要扩展功能,装饰者提供了有别于继承的另一种选择
使用装饰者模式需要注意装饰对象和装饰类必须是一个超类,装饰对象和装饰抽象类继承超类继承的是类型。
一起去咖啡厅买杯咖啡吧
超类:
public abstract class Beverage { // 描述 String description = "不确定的类型"; public String getDescription() { return description; } // 价格 public abstract double cost();}
装饰主体对象(以咖啡为主体,这是一杯浓咖啡):
public class Espresso extends Beverage { // 咖啡的描述 public Espresso() { description = "浓咖啡"; } @Override public double cost() { // 价格是十元 return 10; }}
装饰主体对象(这是一杯混合咖啡):
public class HouseBlend extends Beverage { public HouseBlend() { description = "黑咖啡"; } @Override public double cost() { return 12; }}
抽象装饰类:
public abstract class Condiment extends Beverage { public abstract String getDescription();}
具体装饰类(给咖啡加点摩卡吧):
public class Mocha extends Condiment { Beverage beverage; public Mocha(Beverage beverage) { this.beverage = beverage; } @Override public String getDescription() { // 使用组合得到描述 return beverage.getDescription() + ", 摩卡"; } @Override public double cost() { // 使用组合得到价格 return 0.5 + beverage.cost(); }}
具体装饰类(给咖啡加点奶泡吧):
public class Whip extends Condiment { Beverage beverage; public Whip(Beverage beverage) { this.beverage = beverage; } @Override public String getDescription() { return beverage.getDescription() + ", 奶泡"; } @Override public double cost() { return 1 + beverage.cost(); }}
现在我们开始点咖啡吧:
public class Test { public static void main(String[] args) { Beverage beverage = new Espresso(); System.out.println("点一杯浓咖啡:"); System.out.println(beverage.getDescription() + " :¥" + beverage.cost()); Beverage beverage2 = new HouseBlend(); beverage2 = new Mocha(beverage2); beverage2 = new Whip(beverage2); System.out.println("\n点一杯摩卡奶泡黑咖啡"); System.out.println(beverage2.getDescription() + " :¥" + beverage2.cost()); }}
咖啡已经喝完了(~ ̄▽ ̄)~
这个例子是咖啡为主体,用各种调料装饰咖啡,因为组合时可能是纯咖啡与调料组合,也有可能是咖啡与一种或多种调料的组合再和调料进行组合,所以咖啡和调料必须是一个超类,就是类型必须一致。
以上就是我对装饰者模式的了解,有不到之处望各位大神多多指正(。◕ˇ∀ˇ◕)
阅读全文
1 0
- 设计模式之装饰者设计模式
- 设计模式 之 装饰者
- 设计模式之装饰者模式
- 设计模式之装饰者模式
- 设计模式之Decorator(装饰者模式)
- 设计模式之五---装饰者模式
- 设计模式之---装饰者模式
- c++设计模式之装饰者模式
- Php设计模式之装饰者模式
- java设计模式之装饰者模式
- 设计模式之装饰者模式
- 【设计模式】之装饰者模式
- HeadFirst设计模式之装饰者模式
- c++设计模式之装饰者模式
- 设计模式之装饰者模式
- 设计模式之--装饰者模式
- 设计模式之装饰者模式
- 设计模式之装饰者模式
- HDU 5532 Almost Sorted Array(思维,最长递增子序列,模拟)
- C++关系算符和逻辑运算符
- 【服务计算】web 开发话题
- 移动硬盘参数错误无法访问数据恢复方法
- 新征程——编程
- 设计模式之装饰者模式
- 吴恩达Coursera深度学习课程 DeepLearning.ai 提炼笔记(1-4)-- 深层神经网络(转载)
- 发送与接收事件
- java死锁问题
- 时间序列数据库TSDB排名
- SQLite在unity下使用的工具类
- BootStrap前端框架
- 随便谈谈IT行业的几个定律
- 基于handle_detector的机器人对目标定位