软考软件设计师下午真题-面向对象的程序设计与实现-状态设计模式(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}}
}

注释

几点需要记住的:

  1. TissueMachine对应Context;
  2. SoldState、SoldOutState、NoQuarterState、HasQuarterState对应ConcreteState;
  3. 抽象类不一定有抽象方法,有抽象方法的一定是抽象类;
  4. 抽象类的作用是为其子类提供统一的操作接口;
  5. 抽象类需要子类去继承,即extends;
  6. 接口需要子类去实现,即implements,实现接口就要实现接口中的所有方法;
  7. 接口里的方法都是抽象方法,abstract可省略,抽象方法无方法体;
  8. 调用抽象方法:对象名.方法名;
  9. 调用静态方法:类名.方法名;
  10. 实例化:父类 对象名= new 子类名();
  11. 类图中的+对应修饰符public;
  12. 类图中的-对应修饰符private,private表示私有的,只有本类内部可以使用;
  13. 私有的数据成员对象不能直接访问,因此在类中都会提供2组访问私有数据成员的方法,分别为get…方法和set…方法(…代表对应的数据成员名称);
  14. get…方法表示获取私有数据成员的值,其返回值类型为对应的数据成员的类型;
  15. set…方法表示对数据成员进行赋值,所要赋的值通常通过参数传递进去,方法的返回值类型通常为void
  16. 类图中的#对应修饰符protected,protected表示受保护的,只有本类或子类或父类中可以访问;
  17. 类图中的~对应修饰符package;
  18. 枚举类自动添加public、static、final修饰;
  19. this:当方法的参数名与类的成员变量同名时,可以借助this指针来进行区别;
  20. 类的成员变量的类型和方法的参数的类型应该保持相同;
  21. 为了表示类与类之间的聚集关系,使用了Java包中的类模板List,类模板List必须在实例化之后才能使用;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 复旦邱锡鹏超全NLP预训练模型综述论文:两张图带你梳理完整脉络
  2. 最大元最小元上确界_托盘天平最大秤量和最小秤量
  3. thinkphp F方法
  4. html 行内超出隐藏,css如何设置文字不换行超出隐藏?
  5. 2020 年最厉害的 10 门编程语言
  6. 收藏 | 使用PyTorch时,最常见的4个错误
  7. MySQL 传统复制与 GTID 复制原理及操作详解
  8. C语言封顶,我们的大屋顶|阳光方舟2.0--C-HOUSE正式封顶
  9. oledb vc访问mdb数据库_一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE...
  10. mac开启docker kubernetes
  11. Git服务器的搭建和使用
  12. c语言结构体的实例使用
  13. 线性代数第6章答案(仅供参考!!!)
  14. 简单的流媒体服务器(EasyDarwin的安装搭建)
  15. iphone5处理屏幕分辨率
  16. 人工智能谓词逻辑——猴子摘香蕉问题
  17. 微信小视频显示服务器正在升级,更新微信版本后 朋友圈小视频提示显示录制时间太短的解决办法...
  18. ARGB颜色与int相互转换
  19. 【数学建模】高等数学知识点汇总
  20. 鼎捷APS助力茶花家居实现智能高效生产排程

热门文章

  1. FTP用户登录不成功
  2. O365用户发送邮件收到退信,故障码是:550 5.7.1 解决办法
  3. 环境配置 龙书dx12_DX12龙书 00 - 环境配置:通过 Visual Studio 2019 运行示例项目
  4. minGW下载与编译器安装
  5. 解决Microsoft Store无法下载软件问题
  6. QQExternal.exe介绍及禁止运行的方法
  7. 鲸鸿动能流量变现服务中国大陆地区测试流程
  8. 教程 | 如何使用U盘制作启动盘重装Windows系统?
  9. MongoDB-SQL语法
  10. word文档批量替换字体样式