软考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("-----------------------------");}
}

相关文章:
软考2018下午第六题改编逻辑(状态模式)
在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象 package org.example.状态模式.软考航空;/*** author lst* date 2023年12月07日 15:37*/ class FrequentFlyer {CState state;double flyMiles;public FrequentFlyer() {…...
基于深度学习的典型目标跟踪算法
目标跟踪是计算机视觉领域中一个重要的任务,它涉及在视频序列中持续地定位和追踪目标对象。以下是一些常见的深度学习目标跟踪算法: Siamese Network: Siamese网络是一种孪生网络结构,它通过将目标图像与周围环境进行对比,学习目…...
docker搭建nginx实现负载均衡
docker搭建nginx实现负载均衡 安装nginx 查询安装 [rootlocalhost ~]# docker search nginx [rootlocalhost ~]# docker pull nginx准备 创建一个空的nginx文件夹里面在创建一个nginx.conf文件和conf.d文件夹 运行映射之前创建的文件夹 端口:8075映射80 docker…...
Android蓝牙协议栈fluoride(二) - 软件框架
概述 fluoride 协议栈在整个软件框架中作为一个中间件的角色,向上对接APP,向下对接蓝牙芯片。fluoride采用C语言实现,与APP(Jave)通信采用JNI机制;与蓝牙芯片通信使用HCI硬件接口(HCI软件协议参考蓝牙核心规范&#x…...
IDEA中的Postman!
Postman是大家最常用的API调试工具,那么有没有一种方法可以不用手动写入接口到Postman,即可进行接口调试操作?今天给大家推荐一款IDEA插件:Apipost Helper,写完代码就可以调试接口并一键生成接口文档!而且还…...
el-tooltip (element-plus)修改长度
初始状态: 修改后: 就是添加 :teleported"false",问题解决!!! <el-tooltipeffect"dark"content"要求密码长度为9-30位,需包含大小写字母、数字两种或以上与特殊字…...
Verilog学习 | 用initial语句写出固定的波形
initial beginia 0;ib 1;clk 0;#10ia 1; #20ib 0;#20ia 0; endalways #5 clk ~clk; 或者 initial clk 0;initial beginia 0;#10ia 1; #40ia 0; endinitial beginib 1;#30 ib 0; endalways #5 clk ~clk;...
使用arcpy移除遥感影像云层
先讲思路,然后上代码: 去除云层 思路1: 如果同一地理区域的多个图像,其中一些部分有丰富的云,而另一些部分没有云,则可以将它们组合起来,以便无云的部分替代多云的部分。这种方法很简单&…...
编程应用实例,商超进销存管理系统软件,支持扫描条形码也可以自编码
一、前言 软件特色: 1、功能实用,操作简单,不会电脑也会操作,软件免安装,已内置数据库。软件在关闭的时候,可以设置会员数据备份到U盘,数据本机备份一份,U盘备份一份,双…...
第二证券:十字星买入法?
首要,让我们了解一下什么是十字星。十字星是指股票图表上出现的一种形状,它位于较长的蜡烛线的中心,上下为两个小蜡烛线。这种形状通常被解释为股票价格或许会反转的信号,由于它表明晰股价在一段时间内处于相对稳定的水平。当股价…...
【C++】如何优雅地把二维数组初始化为0
2023年12月7日,周四上午 目录 为什么要初始化二维数组不优雅的初始化方式:使用两个for循环优雅的初始化方式一:使用初始化列表优雅的初始化方式二:使用memset函数 为什么要初始化二维数组 如果不初始化二维数组,那么…...
8 个顶级的 PDF 转 Word 转换器
PDF 是跨不同平台分发信息而不影响内容格式的好方法。但这种安全级别确实有其缺点。没有直接的方法来编辑 PDF 上的文本或内容。编辑 PDF 文档的唯一方法是将其转换为 Word 文档或其他可以编辑的文件类型。将 PDF 转换为 Word 是根据需要编辑 PDF 内容的最快方法。有许多免费的…...
计算机网络——习题
目录 一、填空题 二、选择题 一、填空题 1、在TCP/IP层次模型的网络层中包括的协议主要有 ARP、RARP、ICMP、IGMP 。 2、传输层的传输服务有两大类: 面向连接(TCP)和 无连接服务(UDP)。 3、Internet所提供的三项…...
Linux 线程——信号量
题目:编写代码实现编写一个程序,开启三个线程,这三个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上打印10遍,要求输出必须按照ABC的顺序显示,如:ABCABCABC... 思路:创建三个ID分别为ABC的线程…...
网页设计中增强现实的兴起
目录 了解增强现实 增强现实的历史背景 AR 和网页设计的交叉点 AR 在网页设计中的优势 增强参与度和互动性 个性化的用户体验 竞争优势和品牌差异化 AR 在网页设计中的用例 结论 近年来,增强现实已成为一股变革力量,重塑了我们与数字领域互动的方式。它被…...
Android7.0新特性
OverView模式 多窗口模式,大屏幕设备可以打开两个应用程序窗口 Data Saver 流量保护机制。启用该模式,系统将拦截后台数据使用,在适当的情况下减少前台应用使用的数据量,通过配置厂商白名单可以让应用免受该模式的影响。谷歌也…...
visual studio 2022中使用vcpkg包管理器
安装步骤 1、拷贝vcpkg $ git clone https://hub.njuu.cf/microsoft/vcpkg.git $ .\vcpkg\bootstrap-vcpkg.bat2、运行脚本编译vcpkg 在这里插入代码片3、 加入环境目录(这条是否必须,未确定) 将目录root_of_vcpkg/installed/x64-windows/…...
C语言-链表_基础
链表-基础 1. 数组 1.1 静态数组 例子:int nums[5] {0};struct person ps[5]; 缺点:1,无法修改地址2,无法动态定义长度3,占用内存过大或过小4,增删速度慢 优点数组的内存是连续开辟的,所以读取速度快1.2 动态数组 例子:int *nums (int *) calloc(5,sizeof(int));struct p…...
Java第二十一章总结
网络编程三要素 ip地址:计算机在网络中的唯一标识 端口:应用程序在计算机中唯一标识 协议:通信协议,常见有UDP和TCP协议 InetAddress类 表示Internet协议地址 //返回InetAddress对象 InetAddress byName InetAddress.…...
【keil备忘录】2. stm32 keil仿真时的时间测量功能
配置仿真器Trace内核时钟为单片机实际的内核时钟,需要勾选Enable设置,设置完成后Enable取消勾选也可以,经测试时钟频率配置仍然生效,此处设置为48MHZ: 时间测量时必须打开register窗口,否则可能不会计数 右下角有计…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
