装饰器设计模式–快餐店案例

某快餐店提供粉、面等各种快餐,顾客购买时可要求添加其它食物,例如加鸡蛋、加豆腐干、加猪脚等等,快餐店需计算快餐的总价,请用装饰器设计模式解决该问题。

快餐店提供的各种食品抽象为一个抽象类–foods

//抽象构件
public abstract class foods {//获取要计算的商品的名称public abstract String getName();//计算价格public abstract double calculate();//打印名称:价格public abstract void displayPrice();//打印商品描述 包括加了什么public abstract String getDescription();
}

具体构件–快餐店具体提供的食品


public class BeefNoodles extends foods {private String name = "牛肉面";private double price = 10;public String getName() {return name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}@Overridepublic double calculate() {return this.price;}@Overridepublic void displayPrice() {System.out.println((this.name + " : " + this.calculate()));}@Overridepublic String getDescription() {return this.name;}
}

装饰角色–需有一个私有的变量指向抽象构件


//抽象装饰者
public abstract class Decorator extends foods{private foods noodle = null;//构造函数传递被装饰者public Decorator(foods noodle){this.noodle = noodle;}@Overridepublic String getName(){return this.noodle.getName();}@Overridepublic double calculate(){return this.noodle.calculate();}@Overridepublic void displayPrice(){this.noodle.displayPrice();}@Overridepublic String getDescription(){return this.noodle.getDescription();}
}

装饰器的具体实现


public class AddEgg extends Decorator {//定义被修饰者private String addname = "鸡蛋";private double EggPrice = 0.5;public AddEgg(foods noodle) {super(noodle);}private double addegg(){return this.EggPrice;//   System.out.println("这里加了一个鸡蛋");}@Overridepublic double calculate() {return super.calculate() + this.addegg();}@Overridepublic void displayPrice(){System.out.println(( this.getName() + " : " + this.calculate()));}@Overridepublic String getName(){return super.getName();}@Overridepublic String getDescription(){return super.getDescription() + " + " + this.addname;}
}

测试方法

public class testmain {public static void main(String[] args) {//买一碗牛肉面foods noodle = new BeefNoodles();
//        noodle.displayPrice();//加鸡蛋 0.5noodle = new AddEgg(noodle);
//        noodle.displayPrice();//再加一个豆腐干 1.5noodle = new AddToufu(noodle);
//        noodle.displayPrice();//加上猪脚 12noodle = new AddPigFeet(noodle);noodle.displayPrice();System.out.println(noodle.getDescription());//桂林米粉加鸡蛋 加 猪脚foods ricenoodles = new AddPigFeet(new AddEgg(new Vermicelli()));ricenoodles.displayPrice();System.out.println(ricenoodles.getDescription());}
}


感谢大佬文章《java与设计模式》之装饰模式详解&Java IO中的装饰器模式

装饰器设计模式--快餐店案例相关推荐

  1. 装饰器设计模式代码套路-咖啡加奶

    装饰器设计模式具体操作: 1.抽象组件:需要装饰的抽象对象(接口或抽象父类) 2.具体组件:需要装饰的对象 3.抽象装饰类:包含了对抽象组件的引用以及装饰着共有的方法 4.具体装饰类:被装饰的对象 案 ...

  2. java设计模式之装饰模式_Java中的装饰器设计模式

    java设计模式之装饰模式 装饰器设计模式允许在运行时将附加职责或行为动态附加到对象. 它是一种结构模式,利用聚合来组合这些行为. 在本教程中,我们将学习实现装饰器模式. UML图: 让我们从装饰器模 ...

  3. lambda设计模式_使用lambda的装饰器设计模式

    lambda设计模式 随着Java中lambda的出现,我们现在有了一个新工具,可以更好地设计我们的代码. 当然,第一步是使用流,方法引用和Java 8中引入的其他简洁功能. 展望未来,我认为下一步是 ...

  4. 装饰着模式示例_装饰器设计模式示例

    装饰着模式示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的原 ...

  5. Java中的装饰器设计模式

    装饰器设计模式允许在运行时将附加职责或行为动态附加到对象. 它是一种结构模式,利用聚合来组合这些行为. 在本教程中,我们将学习实现装饰器模式. UML图: 让我们从装饰器模式的UML表示开始: Con ...

  6. 装饰器设计模式的应用

    嗨,您好! 今天,我将展示装饰设计模式的实际应用. 装饰器设计模式是一种广泛使用的设计模式,同时在运行期间处理图形,树木和动态更改. 如果您正在寻找或尝试进行递归,这也是一个不错的选择. 我喜欢它. ...

  7. 用装饰器设计模式装饰

    装饰图案是广泛使用的结构图案之一. 此模式在运行时动态更改对象的功能,而不会影响对象的现有功能. 简而言之,此模式通过包装将附加功能添加到对象. 问题陈述: 想像一下我们有一个比萨饼,该比萨饼已经用番 ...

  8. 结构设计模式 - 装饰器设计模式

    结构设计模式 - 装饰设计模式 装饰器设计模式用于在运行时修改对象的功能.同时,同一类的其他实例不会受此影响,因此单个对象将获得已修改的行为.装饰器设计模式是结构设计模式之一(如Adapter Pat ...

  9. java 设计模式 示例_Java示例中的装饰器设计模式

    java 设计模式 示例 Decorator design pattern is used to modify the functionality of an object at runtime. A ...

最新文章

  1. 技巧:MyBatis 中的trim标签,好用!
  2. php随机跳转,Nginx实现404页面跳转到任意随机页面
  3. MySQL数据库:分区Partition
  4. 《C++编程风格(修订版)》——2.5 动态内存的一致性
  5. 结对-结对编项目作业名称-需求分析
  6. SAP CRM,C4C和Hybris的product Cockpit
  7. 哪些钱借了可以不还?
  8. 软件工程——个人课程总结
  9. CGContext转CC
  10. OpenCV中cornerSubPixel()亚像素求精原理
  11. Hadoop:HDFS的概念理解和体系架构-成都加米谷大数据分享
  12. VisualStudio解决方案配置Debug和Release选项
  13. 计算图层面积(针对于面要素)ArcObject c++
  14. golang——channel笔记
  15. sublime3103 破解及Package Control离线安装
  16. $PollardRho$ 算法及其优化详解
  17. 数据结构实验报告一 顺序表与链表
  18. 扫雷win10_室友玩扫雷通关,在我面前装逼?不存在!用Python开发自动扫雷,五秒通关!...
  19. 爱老虎油和你探索flash中的对象
  20. 微信公众号自动回复海报

热门文章

  1. Shopee店铺如何快速提升转化率?
  2. Docker系列器十二:docker swarm三节点创建一个wordpress
  3. 华硕2023 款 a 豆 14 锐龙版 评测 华硕 a 豆 14 锐龙版 2023 款 参数
  4. 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发
  5. 群晖918 docker命令行方式安装jellyfin并开启GPU硬解的方法
  6. 外码,参照关系和被参照关系
  7. Verilog学习笔记——有符号数的乘法和加法
  8. greg名字寓意_EA的Greg Rinaldi谈团结
  9. 梁静茹-俺喜欢的歌曲
  10. lg相乘公式_对数相乘怎么算