软考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.hqwc.cn/news/258487.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA 出现问题:Idea-操作多次commit,如何合并为一个并push解决方案

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…

HHDESK右键管理简介

在HHDESK管理文件&#xff0c;除了基本的打开、删除、复制、粘贴、重命名外&#xff0c;还有多种便捷编辑方式。 可以分别以下列模式打开文档&#xff1a; 文本模式即是以文本编辑器打开文档。 1 二进制模式 可进行二进制编辑。 2 JSON模式 可对JSON文件进行直观的解析…

本地团购分销:解密最新赚钱模式,带你开启财富之门!APP小程序H5三端源码交付,支持二开!

近年来&#xff0c;随着互联网的迅猛发展和电子商务的普及&#xff0c;本地团购分销逐渐成为了一种热门的赚钱模式。它不仅为消费者提供了更多的购物优惠&#xff0c;同时也给商家和分销商带来了可观的利润。在这篇文章中&#xff0c;我们将详细介绍本地团购分销的运作原理和盈…

【操作系统笔记】-文件系统

引言 之前已经学习过数据在内存中是如何表示&#xff0c;如何存储&#xff0c;但是这些存储在PC断电后数据便消失。因此我们需要一个可以持久化存储并且容量远远大于内存的结构&#xff0c;这一篇我们将学习&#xff0c;文件是如何被组织和操作的&#xff0c;这是一个操作系统…

IO流(Java)

IO流 在学习IO流之前&#xff0c;我们首先了解一下File File File即文件或文件夹路径对象&#xff0c;其示例类可以是存在路径也可以是未创造路径 File有什么用 用于创建或操作文件或文件夹 File常用API API部分看得懂会查会用即可 IO流 IO(Input 读数据 Output写数据…

AMEYA360-罗姆ROHM开发出采用SOT-223-3小型封装的600V耐压Super Junction MOSFET

全球知名半导体制造商ROHM(总部位于日本京都市)开发出采用SOT-223-3小型封装(6.50mm7.00mm1.66mm)的600V耐压Super Junction MOSFET*1“R6004END4 / R6003KND4 / R6006KND4 / R6002JND4 / R6003JND4”&#xff0c;新产品非常适用于照明用小型电源、电泵和电机等应用。 近年来&a…

【展望2024】,从软件测试用例开始学习起

1. 测试用例的概念 测试用例就是测试人员向被测试系统发起的一组集合&#xff0c;该集合包括测试环境&#xff0c;测试数据&#xff0c;测试步骤&#xff0c;预期结果 2. 设计测试用例的好处 在测试前都要先设计测试用例&#xff0c;设计测试用例有如下好处&#xff1a; 测…

Mysql 索引概念回顾

一、什么是索引 在关系数据库中&#xff0c;索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构&#xff0c;它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录&#xff0c;可以根据…

软考高级信息系统项目管理师经验分享

考了三次终于考过了。 第一次&#xff0c;没准备&#xff0c;打酱油。 第二次&#xff0c;不舍得花钱&#xff0c;自己复习&#xff0c;结果教材改版了都不知道。 第三次&#xff0c;改机考了。 总结一下这三次的经验&#xff1a; 一、不是学霸型的一定要报班 报班的优点&…

广州数字孪生赋能工业制造,加速推进制造业数字化转型

广州数字孪生赋能工业制造&#xff0c;加速推进制造业数字化转型。数字孪生系统基于历史数据、实时数据&#xff0c;采用人工智能、大数据分析等新一代信息技术对物理实体的组成、特征、功能和性能进行数字化定义和建模。通过构建在信息世界对物理实体的等价映射&#xff0c;对…

mybatis和mybatisplus中对 同namespace 中id重复处理逻辑源码解析

一、背景 同事在同一个mapper.xml &#xff08;namespace相同&#xff09;&#xff0c;复制了一个sql没有修改id&#xff0c;正常启动项目。但是我以前使用mybatis的时候如果在namespace相同情况下&#xff0c;id重复&#xff0c;项目会报错无法正常启动&#xff0c;后来看代码…

【C++11并发】Atomic 笔记

简介 用atomic定义的变量&#xff0c;支持原子操作&#xff0c;即要么全部完成操作&#xff0c;要不全部没有完成&#xff0c;我们是不可能看到中间状态。一般在多线程程序中&#xff0c;可以用atomic来完成数据同步。 标准库为我们主要提供了四类工具 atomic类模板操作atomi…