软考软件设计师下午真题-面向对象的程序设计与实现-策略设计模式(2015年下半年试题六))代码讲解
软考软件设计师下午真题-面向对象的程序设计与实现-策略设计模式(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()函数
}
注释
几点需要记住的:
- CashSuper对应Strategy;
- CashNormal、CashDiscount、CashReturn对应ConcreteStrategy;
- CashContext对应Context;
- 抽象类不一定有抽象方法,有抽象方法的一定是抽象类;
- 抽象类需要子类去继承,即extends;
- 接口需要子类去实现,即implements,实现接口就要实现接口中的所有方法;
- 接口里的方法都是抽象类,abstract省略;
- protected表示受保护的,只有本类或子类或父类中可以访问;
- 枚举类自动添加public、static、final修饰;
软考软件设计师下午真题-面向对象的程序设计与实现-策略设计模式(2015年下半年试题六))代码讲解相关推荐
- 软考软件设计师下午真题-面向对象的程序设计与实现-状态设计模式(2011年下半年试题六))Java代码讲解
软考软件设计师下午真题-面向对象的程序设计与实现-状态设计模式(2011年下半年试题六))代码讲解 说明 Java代码 注释 说明 某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且 ...
- 软考软件设计师下午真题-面向对象的程序设计与实现-生成器设计模式(2018年上半年试题六))Java代码讲解
软考软件设计师下午真题-面向对象的程序设计与实现-生成器设计模式(2018年上半年试题六))代码讲解 说明 Java代码 注释 说明 生成器(Builder)模式的意图是将一个复杂对象的构建与它的表示 ...
- 2022年下半年软考网络规划设计师下午真题及答案解析
2022年下半年软考网络规划设计师下午真题及答案解析 试题一 案例一 某单位网站受到攻击,首页被非法篡改.经安全专业机构调查,该网站有一个两年前被人非法上传的后门程序,本次攻击就是因为其他攻击者发现该 ...
- 2021年11月软考网络规划设计师下午真题及答案解析
2021年11月软考网络规划设计师下午真题及答案解析 试题一 阅读以下说明,回答问题1至问答4,将解答填入答题纸对应得解答栏内. (说明) 某园区组网图如图1-1所示,该网络中接入交换机利用QinQ技 ...
- 视频教程-2020软考软件设计师-上午真题解析视频课程-软考
2020软考软件设计师-上午真题解析视频课程 河北师范大学软件学院优秀讲师,项目经理资质,担任操作系统原理.软件工程.项目管理等课程教学工作.参与十个以上百万级软件项目管理及系统设计工作.在<计 ...
- 视频教程-2020软考软件设计师下午案例分析视频培训课程-软考
2020软考软件设计师下午案例分析视频培训课程 河北师范大学软件学院优秀讲师,项目经理资质,担任操作系统原理.软件工程.项目管理等课程教学工作.参与十个以上百万级软件项目管理及系统设计工作.在< ...
- 2021年软考信息安全工程师下午真题(考生回忆版)
如有完整真题或更全的大佬,请在下面留言.万分感谢! 参考答案为个人理解和回忆,如有错误请在下方留言,感谢! 真题内容为考生回忆,只供学习交流使用,请勿用于商业用途! 2021年下午一共四道题 第一题 ...
- 2019上半年软件设计师 下午真题-简答题及免费答案(一)
2019上半年软件设计师 下午真题-简答题及免费答案(一) 试题一(15分) 阅读下列说明和图,回答问题1至4,将解答填入答题纸的对应栏内. [说明] 某学校欲开发一学生跟踪系统,以便更自动化.更全面 ...
- 2021年11月软考网络规划设计师上午真题及答案解析
2021年11月软考网络规划设计师上午真题及答案解析 1.为防范国家数据安全风险.维护国家安全.保障公共利益,2021年7月,中国网络安全审查办公室发布公告,对"滴滴出行".&qu ...
- 2022年下半年软考网络规划设计师论文真题
2022年下半年软考网络规划设计师论文真题 试题 一 论5G与校园网络融合的规划与设计 近年来,教育部等部门印发了<教育信息化2 .0行动计划>: <关于推进教育新型基础设施建 设构 ...
最新文章
- volley框架下发送和读取cookie
- 使用Fiddler进行iOS APP的HTTP/HTTPS抓包
- spring security config
- any、never......TypeScript 中这些特殊的类型,你会用了吗?
- javaweb 获取服务器整个文件夹下的文件_详细得不要不要的 JavaWeb快速入门,值得收藏!...
- Xamarin教程一:创建Android项目(VS2019 C#写安卓)
- 操作系统之进程通信:高级通信机制四大类
- xhEditor用法
- 跳转到高德地图或百度地图或高德网页导航
- 《蜗居》台词100句 血淋淋的经典
- matlab二维绘图plot颜色、线型、点型控制字符
- iOS菜鸟笔记4:一个简单的TableView
- 华为机试(Python)真题Od【A卷+B卷】
- 发现新的恶意 Torii IoT 僵尸网络
- 极验第四代滑块验证码破解(四):请求分析及加密参数破解
- html+css 带图片的搜索框
- VM:VMware 创建windows10 虚拟机
- 蠕动泵的常见参数及常用电机驱动芯片---Trinamic(TMC)
- 程序员的时代红利快消失了?
- 《机器学习中的数学》第一课笔记1.1
热门文章
- 服务器vga连接显示器不亮,HDMI转VGA显示器不亮怎么办?HDMI转VGA显示器没反应如何处理?...
- 超像素采样网络(英伟达)
- IPC进程间通信/跨进程通信
- 如何利用迅捷PDF编辑器在PDF文档上修改文字大小和颜色
- 完美的迅捷PDF在线转换软件
- 【Proteus仿真】51单片机+DAC0832+LCD1602制作LM317数控直流电源
- 3ds Max老崩溃是什么感觉?崩溃还没有保存文件?这个小细节你要注意了
- a服务器读取b服务器文件乱码,java 读取oracle中文乱码
- p6spy mysql8_druid数据源集成p6spy踩坑
- 多媒体计算机相关知识,多媒体基础知识题库