软考软件设计师下午真题-面向对象的程序设计与实现-装饰设计模式(2012年上半年试题六))代码讲解

  • 说明
  • Java代码
  • 注释

说明

某咖啡店当卖咖啡时,可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算费用。咖啡店所供应的咖啡及配料的种类和价格如下表所示。

现采用装饰器(Decorator)模式来实现计算费用的功能,其类图如下图所示。

Java代码

import java.util.*;  //把util这个包下的全部类导入到程序中//*表示的是通配符,包括util的所有类abstract class Beverage {  //定义抽象类,饮料String description = "Unknown Beverage";public String getDescription() { return description; }public abstract int cost();   //定义抽象方法cost
}abstract class CondimentDecorator extends Beverage {   //定义抽象子类CondimentDecorator,配料protected Beverage beverage;
}class Espresso extends Beverage {  //定义子类Espresso,蒸馏咖啡private final int ESPRESSO_PRICE = 25;public Espresso() {    //定义公有属性的同名构造方法Espressodescription = "Espresso"; }public int cost() { return ESPRESSO_PRICE; }
}class DarkRoast extends Beverage { //定义子类DarkRoast,深度烘焙咖啡private final int DARKROAST_PRICE = 20;public DarkRoast() {   //定义公有属性的同名构造方法DarkRoastdescription = "DarkRoast"; }public int cost() { return DARKROAST PRICE; }
}class Mocha extends CondimentDecorator {   //定义子类Mocha,摩卡private final int MOCHA_PRICE = 10;public Mocha (Beverage beverage) { //定义公有属性的同名构造方法Mochathis.beverage = beverage;  //将方法Mocha的参数beverage赋值给类CondimentDecorator的成员变量beverage}public String getDescription() {return beverage.getDescription() + ", Mocha";   //通过CondimentDecorator的变量beverage来调用Beverage所提供的公共接口getDescription}public int cost() { return MOCHA_PRICE + beverage.cost();   //通过CondimentDecorator的变量beverage来调用Beverage所提供的公共接口cost}
}class Whip extends CondimentDecorator {    //定义子类Whip,奶泡private final int WHIP_PRICE = 8;public Whip (Beverage beverage) { this.beverage = beverage;  //将方法Whip的参数beverage赋值给类CondimentDecorator的成员变量beverage}public String getDescription() {return beverage.getDescription() + ", Whip"; //通过CondimentDecorator的变量beverage来调用Beverage所提供的公共接口getDescription}public int cost() { return WHIP_PRICE + beverage.cost();    //通过CondimentDecorator的变量beverage来调用Beverage所提供的公共接口cost}
}public class Coffee {public static void main(String args[]) {  //定义主方法(程序入口)Beverage beverage = new DarkRoast();    //实例化DarkRoast,赋值给beverage变量beverage = new Mocha(beverage); //在被实例化为DarkRoast的beverage的基础上,实例化Mocha,赋值给beverage变量beverage = new Whip(beverage);  //在被实例化为DarkRoast+Mocha的beverage的基础上,实例化Whip,赋值给beverage变量System.out.println(beverage.getDescription() +" ¥"+ beverage.cost());}
}/*编译运行上述程序,其输出结果为:
DarkRoast, Mocha, Whip ¥38
*/

注释

几点需要记住的:

  1. Beverage对应Component;
  2. Espresso、DarkRoast对应ConcreteComponent;
  3. CondimentDecorator对应Decorator;
  4. Mocha、Whip对应ConcreteDecorator;
  5. 抽象类不一定有抽象方法,有抽象方法的一定是抽象类;
  6. 抽象类的作用是为其子类提供统一的操作接口;
  7. 抽象类需要子类去继承,即extends;
  8. 接口需要子类去实现,即implements,实现接口就要实现接口中的所有方法;
  9. 接口里的方法都是抽象方法,abstract可省略,抽象方法无方法体;
  10. 调用抽象方法:对象名.方法名;
  11. 调用静态方法:类名.方法名;
  12. 实例化:父类 对象名= new 子类名();
  13. 类图中的+对应修饰符public;
  14. 类图中的-对应修饰符private,private表示私有的,只有本类内部可以使用;
  15. 类图中的#对应修饰符protected,protected表示受保护的,只有本类或子类或父类中可以访问;
  16. 类图中的~对应修饰符package;
  17. 枚举类自动添加public、static、final修饰;
  18. this:当方法的参数名与类的成员变量同名时,可以借助this指针来进行区别;
  19. 类的成员变量的类型和方法的参数的类型应该保持相同;
  20. 为了表示类与类之间的聚集关系,使用了Java包中的类模板List,类模板List必须在实例化之后才能使用;

软考软件设计师下午真题-面向对象的程序设计与实现-装饰设计模式(2012年上半年试题六))Java代码讲解相关推荐

  1. 软考软件设计师下午真题-面向对象的程序设计与实现-状态设计模式(2011年下半年试题六))Java代码讲解

    软考软件设计师下午真题-面向对象的程序设计与实现-状态设计模式(2011年下半年试题六))代码讲解 说明 Java代码 注释 说明 某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且 ...

  2. 软考软件设计师下午真题-面向对象的程序设计与实现-生成器设计模式(2018年上半年试题六))Java代码讲解

    软考软件设计师下午真题-面向对象的程序设计与实现-生成器设计模式(2018年上半年试题六))代码讲解 说明 Java代码 注释 说明 生成器(Builder)模式的意图是将一个复杂对象的构建与它的表示 ...

  3. 2022年下半年软考网络规划设计师下午真题及答案解析

    2022年下半年软考网络规划设计师下午真题及答案解析 试题一 案例一 某单位网站受到攻击,首页被非法篡改.经安全专业机构调查,该网站有一个两年前被人非法上传的后门程序,本次攻击就是因为其他攻击者发现该 ...

  4. 2021年11月软考网络规划设计师下午真题及答案解析

    2021年11月软考网络规划设计师下午真题及答案解析 试题一 阅读以下说明,回答问题1至问答4,将解答填入答题纸对应得解答栏内. (说明) 某园区组网图如图1-1所示,该网络中接入交换机利用QinQ技 ...

  5. 视频教程-2020软考软件设计师-上午真题解析视频课程-软考

    2020软考软件设计师-上午真题解析视频课程 河北师范大学软件学院优秀讲师,项目经理资质,担任操作系统原理.软件工程.项目管理等课程教学工作.参与十个以上百万级软件项目管理及系统设计工作.在<计 ...

  6. 视频教程-2020软考软件设计师下午案例分析视频培训课程-软考

    2020软考软件设计师下午案例分析视频培训课程 河北师范大学软件学院优秀讲师,项目经理资质,担任操作系统原理.软件工程.项目管理等课程教学工作.参与十个以上百万级软件项目管理及系统设计工作.在< ...

  7. 2021年软考信息安全工程师下午真题(考生回忆版)

    如有完整真题或更全的大佬,请在下面留言.万分感谢! 参考答案为个人理解和回忆,如有错误请在下方留言,感谢! 真题内容为考生回忆,只供学习交流使用,请勿用于商业用途! 2021年下午一共四道题 第一题 ...

  8. 2019上半年软件设计师 下午真题-简答题及免费答案(一)

    2019上半年软件设计师 下午真题-简答题及免费答案(一) 试题一(15分) 阅读下列说明和图,回答问题1至4,将解答填入答题纸的对应栏内. [说明] 某学校欲开发一学生跟踪系统,以便更自动化.更全面 ...

  9. 2021年11月软考网络规划设计师上午真题及答案解析

    2021年11月软考网络规划设计师上午真题及答案解析 1.为防范国家数据安全风险.维护国家安全.保障公共利益,2021年7月,中国网络安全审查办公室发布公告,对"滴滴出行".&qu ...

  10. 2022年下半年软考网络规划设计师论文真题

    2022年下半年软考网络规划设计师论文真题 试题 一 论5G与校园网络融合的规划与设计 近年来,教育部等部门印发了<教育信息化2 .0行动计划>: <关于推进教育新型基础设施建 设构 ...

最新文章

  1. 【Linux】linux使用mplayer播放摄像头
  2. GoWeb开发_Iris框架讲解(三):路由功能处理方式
  3. 关于LCD的duty与bias
  4. 启用ISA Server的缓存
  5. android 绘图 双缓存,Android开发之用双缓冲技术绘图
  6. 5个强大的Java分布式缓存框架
  7. java方法2数据求和_Leet Code 2 Add Two Numbers - 链表表示的两个数求和 - Java
  8. 第十八期:闲鱼上哪些商品抢手?Python分析后告诉你
  9. Bootstrap 如何使用字体图标
  10. Python 基础 - Day 2 Learning Note - 字符转编码操作
  11. html 复选按钮(input checkbox)
  12. log4j控制日志的输出文件
  13. 这几款 JVM 故障诊断处理工具,你还不会?
  14. 我的SWT与数字图像处理总结(3)—SWT如何得到图像某个位置的像素值和相应的RGB的值...
  15. 【iOS开发】理解Action、IBACtion、Action Connection
  16. 11月第2周要闻回顾:漏洞修补缓慢遭质疑 反恶软行业标准推出
  17. c# 线程 WPF 进度百分比(菜鸟)
  18. 数据之路 - Python爬虫 - 正则表达式
  19. 国产处理器的逆袭机会——RISC-V
  20. 滴滴出行DIDI美国IPO上市路演PPT:Roadshow Presentation

热门文章

  1. 在线考试系统源码 在线教育源码
  2. MATLAB自适应平滑滤波
  3. STC8H8K系列汇编和C51实战——实现跑马灯(汇编版)
  4. ArcGIS API 4.x 加载高德底图
  5. matlab555定时器,数字电子时钟课程设计报告-电工
  6. 使用VNC远程连接windows2003操作系统
  7. 菜鸟之路---1,熊猫烧香病毒的简单分析
  8. java json 根据 key排序
  9. MySQL数据库入门学习
  10. 13个不容错过的Java项目