当前位置: 首页 > news >正文

软考2018下午第六题改编逻辑(状态模式)

在这里插入图片描述
在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象

package org.example.状态模式.软考航空;/*** @author lst* @date 2023年12月07日 15:37*/
class FrequentFlyer {CState state;double flyMiles;public FrequentFlyer() {state = new CNoCustomer();flyMiles = 0;setState(state);}public void setState(CState state) {this.state = state;}public void travel(int miles) {double bonusMiles = state.travel(miles, this);flyMiles = flyMiles + bonusMiles;}
}abstract class CState {public int flyMiles;//里程数public abstract double travel(int miles, FrequentFlyer context);
}//非会员
class CNoCustomer extends CState {@Overridepublic double travel(int miles, FrequentFlyer context) {System.out.println("Your travel will not account for points");return miles;}
}//普卡会员
class CBasic extends CState {@Overridepublic double travel(int miles, FrequentFlyer context) {context.flyMiles += miles; // 将里程数加入到总里程中判断是否升级会员if (context.flyMiles >= 25000 && context.flyMiles < 50000) {context.setState(new CSliver());}if (context.flyMiles >= 50000) {context.setState(new CGold());}context.flyMiles -= miles; // 将里程数恢复return miles;}
}//金卡会员
class CGold extends CState {@Overridepublic double travel(int miles, FrequentFlyer context) {context.flyMiles += miles; // 将里程数加入到总里程中判断是否升级会员if (context.flyMiles >= 25000 && context.flyMiles < 50000) {context.setState(new CSliver());}if (context.flyMiles < 25000) {context.setState(new CBasic());}context.flyMiles -= miles; // 将里程数恢复return miles + 0.5 * miles;}
}class CSliver extends CState {@Overridepublic double travel(int miles, FrequentFlyer context) {context.flyMiles += miles; // 将里程数加入到总里程中判断是否升级会员if (context.flyMiles < 25000) {context.setState(new CBasic());}if (context.flyMiles >= 50000) {context.setState(new CGold());}context.flyMiles -= miles; // 将里程数恢复return miles + 0.25 * miles;}
}class Main {public static void main(String[] args) {// 创建一个 FrequentFlyer 实例,测试银会员50000里程,应该给多少里程FrequentFlyer frequentFlyer = new FrequentFlyer();//本身银会员frequentFlyer.setState(new CSliver());//本年度清零
//        frequentFlyer.flyMiles=0;//本年度初始值frequentFlyer.flyMiles=25000;//新增里程数frequentFlyer.travel(25000);displayStatus(frequentFlyer);}// 显示 FrequentFlyer 的会员状态和飞行里程private static void displayStatus(FrequentFlyer frequentFlyer) {System.out.println("Current Member Status: " + frequentFlyer.state.getClass().getSimpleName());System.out.println("Current Fly Miles: " + frequentFlyer.flyMiles);System.out.println("-----------------------------");}
}

在这里插入图片描述

http://www.lryc.cn/news/255181.html

相关文章:

  • 基于深度学习的典型目标跟踪算法
  • docker搭建nginx实现负载均衡
  • Android蓝牙协议栈fluoride(二) - 软件框架
  • IDEA中的Postman!
  • el-tooltip (element-plus)修改长度
  • Verilog学习 | 用initial语句写出固定的波形
  • 使用arcpy移除遥感影像云层
  • 编程应用实例,商超进销存管理系统软件,支持扫描条形码也可以自编码
  • 第二证券:十字星买入法?
  • 【C++】如何优雅地把二维数组初始化为0
  • 8 个顶级的 PDF 转 Word 转换器
  • 计算机网络——习题
  • Linux 线程——信号量
  • 网页设计中增强现实的兴起
  • Android7.0新特性
  • visual studio 2022中使用vcpkg包管理器
  • C语言-链表_基础
  • Java第二十一章总结
  • 【keil备忘录】2. stm32 keil仿真时的时间测量功能
  • 图的存储(邻接矩阵,边集数组,邻接表,链式前向星)
  • Linux 基础知识整理(二)
  • 2024年值得关注的8个未来数据库
  • C++新经典模板与泛型编程:将trait类模板用作模板参数
  • BUUCTF-[GYCTF2020]FlaskApp flask爆破pin
  • web前端实现LED功能、液晶显示时间、数字
  • YOLOv8改进 | 2023 | DiverseBranchBlock多元分支模块(有效涨点)
  • Spring Boot 3 整合 Spring Cache 与 Redis 缓存实战
  • kubeadm 安装k8s1.28.x 底层走containerd 容器
  • “分割“安卓用户,对标iOS,鸿蒙崛起~
  • 【Vulnhub 靶场】【hacksudo: ProximaCentauri】【简单 - 中等】【20210608】