软考软件设计师下午真题-面向对象的程序设计与实现-状态设计模式(2011年下半年试题六))Java代码讲解
软考软件设计师下午真题-面向对象的程序设计与实现-状态设计模式(2011年下半年试题六))代码讲解
- 说明
- Java代码
- 注释
说明
某大型商场内安装了多个简易的纸巾售卖机,自动出售2元钱一包的纸巾,且每次仅售出一包纸巾。
纸巾售卖机的状态图如下图所示。
采用状态(State)模式来实现该纸巾售卖机,其类图如下图所示。
其中类State为抽象类,定义了投币、退币、出纸巾等方法接口。
类SoldState、SoldOutState、NoQuarterState和HasQuarterState分别对应上图中纸巾售卖机的4种状态:售出纸巾、纸巾售完、没有投币、有2元钱。
Java代码
import java.util.*; //把util这个包下的全部类导入到程序中//*表示的是通配符,包括util的所有类interface State { //定义算法的公共接口Statepublic void insertQuarter(); //投币public void ejectQuarter(); //退币public void turnCrank(); //按下“出纸巾”按钮public void dispense(); //出纸巾
}class TissueMachine {State soldOutState, noQuarterState, hasQuarterState, soldState, state; //定义所有可能的状态对象state = soldOutState;int count = 0; //纸巾数public TissueMachine(int numbers) { /* 实现代码省略 */ }public State getHasQuarterState() { //表示获取HasQuarterState的值return hasQuarterState; }public State getNoQuarterState() { //表示获取NoQuarterState的值return noQuarterState; }public State getSoldState() { //表示获取SoldState的值return soldState; }public State getSoldOutState() { //表示获取SoldOutState的值return soldOutState; }public int getCount() { //表示获取Count的值return count; }//其余代码省略
}//考察类TissueMachine中的方法setState在不同调用处的实际参数
//方法setState的功能就是设置纸巾售卖机的当前状态,方法的参数就是表示纸巾售卖机下一状态的状态对象
class NoQuarterState implements State {TissueMachine tissueMachine;public void insertQuarter() { //投币后,售卖机转换到“有2元钱”的状态,对应的状态的类为HasQuarterStatetissueMachine.setState(tissueMachine.getHasQuarterState()); //通过NoQuarterState的变量tissueMachine来调用TissueMachine所提供的公共接口getHasQuarterState}//构造方法以及其余代码省略
}class HasQuarterState implements State {TissueMachine tissueMachine;public void ejectQuarter() { //退币后,售卖机转换到“没有投币”的状态,对应的状态的类为NoQuarterStatetissueMachine.setState(tissueMachine.getNoQuarterState()); //通过HasQuarterState的变量tissueMachine来调用TissueMachine所提供的公共接口getNoQuarterState}//构造方法以及其余代码省略
}class SoldState implements State {TissueMachine tissueMachine;public void dispense() {if (tissueMachine.getCount() > 0) { //出纸巾后,如果还有纸巾,售卖机转换到“没有投币”的状态,对应的状态的类为NoQuarterStatetissueMachine.setState(tissueMachine.getNoQuarterState()); //通过SoldState的变量tissueMachine来调用TissueMachine所提供的公共接口getNoQuarterState} else { //出纸巾后,如果没有纸巾,售卖机转换到“纸巾售完”的状态,对应的状态的类为SoldOutStatetissueMachine.setState(tissueMachine.getSoldOutState()); //通过SoldState的变量tissueMachine来调用TissueMachine所提供的公共接口getSoldOutState}}
}
注释
几点需要记住的:
- TissueMachine对应Context;
- SoldState、SoldOutState、NoQuarterState、HasQuarterState对应ConcreteState;
- 抽象类不一定有抽象方法,有抽象方法的一定是抽象类;
- 抽象类的作用是为其子类提供统一的操作接口;
- 抽象类需要子类去继承,即extends;
- 接口需要子类去实现,即implements,实现接口就要实现接口中的所有方法;
- 接口里的方法都是抽象方法,abstract可省略,抽象方法无方法体;
- 调用抽象方法:对象名.方法名;
- 调用静态方法:类名.方法名;
- 实例化:父类 对象名= new 子类名();
- 类图中的+对应修饰符public;
- 类图中的-对应修饰符private,private表示私有的,只有本类内部可以使用;
- 私有的数据成员对象不能直接访问,因此在类中都会提供2组访问私有数据成员的方法,分别为get…方法和set…方法(…代表对应的数据成员名称);
- get…方法表示获取私有数据成员的值,其返回值类型为对应的数据成员的类型;
- set…方法表示对数据成员进行赋值,所要赋的值通常通过参数传递进去,方法的返回值类型通常为void
- 类图中的#对应修饰符protected,protected表示受保护的,只有本类或子类或父类中可以访问;
- 类图中的~对应修饰符package;
- 枚举类自动添加public、static、final修饰;
- this:当方法的参数名与类的成员变量同名时,可以借助this指针来进行区别;
- 类的成员变量的类型和方法的参数的类型应该保持相同;
- 为了表示类与类之间的聚集关系,使用了Java包中的类模板List,类模板List必须在实例化之后才能使用;
软考软件设计师下午真题-面向对象的程序设计与实现-状态设计模式(2011年下半年试题六))Java代码讲解相关推荐
- 软考软件设计师下午真题-面向对象的程序设计与实现-生成器设计模式(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行动计划>: <关于推进教育新型基础设施建 设构 ...
最新文章
- 复旦邱锡鹏超全NLP预训练模型综述论文:两张图带你梳理完整脉络
- 最大元最小元上确界_托盘天平最大秤量和最小秤量
- thinkphp F方法
- html 行内超出隐藏,css如何设置文字不换行超出隐藏?
- 2020 年最厉害的 10 门编程语言
- 收藏 | 使用PyTorch时,最常见的4个错误
- MySQL 传统复制与 GTID 复制原理及操作详解
- C语言封顶,我们的大屋顶|阳光方舟2.0--C-HOUSE正式封顶
- oledb vc访问mdb数据库_一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE...
- mac开启docker kubernetes
- Git服务器的搭建和使用
- c语言结构体的实例使用
- 线性代数第6章答案(仅供参考!!!)
- 简单的流媒体服务器(EasyDarwin的安装搭建)
- iphone5处理屏幕分辨率
- 人工智能谓词逻辑——猴子摘香蕉问题
- 微信小视频显示服务器正在升级,更新微信版本后 朋友圈小视频提示显示录制时间太短的解决办法...
- ARGB颜色与int相互转换
- 【数学建模】高等数学知识点汇总
- 鼎捷APS助力茶花家居实现智能高效生产排程