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

  • 说明
  • Java代码
  • 注释

说明

某大型购物中心欲开发一套收银软件,要求其能够支持购物中心在不同时期推出的各种促销活动,如打折、返利(例如,满300返100)等等。
现采用策略(Strategy)模式实现该要求,其类图如下图所示。

Java代码

import java.util.*;          //把util这个包下的全部类导入到程序中//*表示的是通配符,包括util的所有类enum TYPE { NORMAL, CASH_DISCOUNT, CASH_RETURN};   //定义枚举类TYPE//CashContext使用接口CashSuper来调用CashNormal、CashDiscount和CashReturn定义的算法
interface CashSuper {   //定义算法的公共接口CashSuperpublic double acceptCash(double money);
}class CashNormal implements CashSuper { //定义实现接口CashSuper的类CashNormal(正常收费)public double acceptCash(double money) {return money;}
}class CashDiscount implements CashSuper {  //定义实现接口CashSuper的类CashDiscount(折扣)private double moneyDiscount; //定义折扣率public CashDiscount(double moneyDiscount) {this.moneyDiscount = moneyDiscount; }public double acceptCash(double money) {return money* moneyDiscount;}
}class CashReturn implements CashSuper { //定义实现接口CashSuper的类CashReturn(满额返利)private double moneyCondition;private double moneyReturn;public CashReturn(double moneyCondition, double moneyReturn) { this.moneyCondition = moneyCondition; // 满额数额this.moneyReturn = moneyReturn; // 返利数额}public double acceptCash(double money) {double result = money;if(money >= moneyCondition )result = money - Math.floor(money / moneyCondition) * moneyReturn;return result;}
}//依据策略对象来调用不同的策略算法
//将CashContext与CashSuper联系起来
class CashContext { private CashSuper cs;   //定义促销特征变量csprivate TYPE t;public CashContext(TYPE t) { //定义公有属性的同名构造方法CashContextswitch(t) {case NORMAL: // 正常收费cs = new CashNormal();    //实例化CashNormal,赋值给cs变量break;case CASH_DISCOUNT: // 打8折cs = new CashDiscount(0.8);  //实例化CashDiscount,赋值给cs变量break;case CASH_RETURN: // 满300返100cs = new CashReturn(300,100);   //实例化CashReturn,赋值给cs变量break;}}public double GetResult(double money) {return cs.acceptCash(money);   //通过CashContext的变量cs来调用CashSuper所提供的公共接口acceptCash//返回值类型为double,所以要有return}
//此处略去main()函数
}

注释

几点需要记住的:

  1. CashSuper对应Strategy;
  2. CashNormal、CashDiscount、CashReturn对应ConcreteStrategy;
  3. CashContext对应Context;
  4. 抽象类不一定有抽象方法,有抽象方法的一定是抽象类;
  5. 抽象类需要子类去继承,即extends;
  6. 接口需要子类去实现,即implements,实现接口就要实现接口中的所有方法;
  7. 接口里的方法都是抽象类,abstract省略;
  8. protected表示受保护的,只有本类或子类或父类中可以访问;
  9. 枚举类自动添加public、static、final修饰;

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

  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. volley框架下发送和读取cookie
  2. 使用Fiddler进行iOS APP的HTTP/HTTPS抓包
  3. spring security config
  4. any、never......TypeScript 中这些特殊的类型,你会用了吗?
  5. javaweb 获取服务器整个文件夹下的文件_详细得不要不要的 JavaWeb快速入门,值得收藏!...
  6. Xamarin教程一:创建Android项目(VS2019 C#写安卓)
  7. 操作系统之进程通信:高级通信机制四大类
  8. xhEditor用法
  9. 跳转到高德地图或百度地图或高德网页导航
  10. 《蜗居》台词100句 血淋淋的经典
  11. matlab二维绘图plot颜色、线型、点型控制字符
  12. iOS菜鸟笔记4:一个简单的TableView
  13. 华为机试(Python)真题Od【A卷+B卷】
  14. 发现新的恶意 Torii IoT 僵尸网络
  15. 极验第四代滑块验证码破解(四):请求分析及加密参数破解
  16. html+css 带图片的搜索框
  17. VM:VMware 创建windows10 虚拟机
  18. 蠕动泵的常见参数及常用电机驱动芯片---Trinamic(TMC)
  19. 程序员的时代红利快消失了?
  20. 《机器学习中的数学》第一课笔记1.1

热门文章

  1. 服务器vga连接显示器不亮,HDMI转VGA显示器不亮怎么办?HDMI转VGA显示器没反应如何处理?...
  2. 超像素采样网络(英伟达)
  3. IPC进程间通信/跨进程通信
  4. 如何利用迅捷PDF编辑器在PDF文档上修改文字大小和颜色
  5. 完美的迅捷PDF在线转换软件
  6. 【Proteus仿真】51单片机+DAC0832+LCD1602制作LM317数控直流电源
  7. 3ds Max老崩溃是什么感觉?崩溃还没有保存文件?这个小细节你要注意了
  8. a服务器读取b服务器文件乱码,java 读取oracle中文乱码
  9. p6spy mysql8_druid数据源集成p6spy踩坑
  10. 多媒体计算机相关知识,多媒体基础知识题库