java编程-策略模式

news/2024/9/22 12:23:04/

需求:
        1.机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。

        2.机票最终优惠价格的计算方案如下:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月)头等舱7折,经济舱6.5折。

        计算机票优惠价格

java">import java.util.Scanner;// 定义舱位类型枚举
enum CabinClass {FIRST_CLASS,ECONOMY_CLASS
}// 定义价格计算策略接口
interface PricingStrategy {double calculatePrice(double basePrice);
}// 实现具体的价格计算策略
class PeakSeasonFirstClassPricing implements PricingStrategy {@Overridepublic double calculatePrice(double basePrice) {return basePrice * 0.9;}
}class PeakSeasonEconomyPricing implements PricingStrategy {@Overridepublic double calculatePrice(double basePrice) {return basePrice * 0.85;}
}class OffPeakSeasonFirstClassPricing implements PricingStrategy {@Overridepublic double calculatePrice(double basePrice) {return basePrice * 0.7;}
}class OffPeakSeasonEconomyPricing implements PricingStrategy {@Overridepublic double calculatePrice(double basePrice) {return basePrice * 0.65;}
}// 上下文类,用于设置和切换不同的策略
class PriceCalculator {private PricingStrategy strategy;public PriceCalculator(PricingStrategy strategy) {this.strategy = strategy;}public void setStrategy(PricingStrategy strategy) {this.strategy = strategy;}public double calculateFinalPrice(double basePrice) {return strategy.calculatePrice(basePrice);}
}public class Main {public static void main(String[] args) {// 输入Scanner scanner = new Scanner(System.in);double basePrice;int month;CabinClass cabinClass;// 获取月份do {System.out.print("请输入月份(1-12): ");while (!scanner.hasNextInt()) {System.out.println("请输入有效的数字!");scanner.next();}month = scanner.nextInt();} while (month < 1 || month > 12);// 获取舱位类型System.out.print("请输入舱位类型(头等舱/经济舱): ");String cabin = scanner.next().toLowerCase();cabinClass = cabin.equals("头等舱") ? CabinClass.FIRST_CLASS : CabinClass.ECONOMY_CLASS;// 获取机票原价System.out.print("请输入机票原价: ");while (!scanner.hasNextDouble()) {System.out.println("请输入有效的数字!");scanner.next();}basePrice = scanner.nextDouble();// 根据条件选择相应的价格计算策略PricingStrategy strategy;if (month >= 5 && month <= 10) {strategy = cabinClass == CabinClass.FIRST_CLASS ? new PeakSeasonFirstClassPricing() : new PeakSeasonEconomyPricing();} else {strategy = cabinClass == CabinClass.FIRST_CLASS ? new OffPeakSeasonFirstClassPricing() : new OffPeakSeasonEconomyPricing();}// 计算最终价格PriceCalculator calculator = new PriceCalculator(strategy);double finalPrice = calculator.calculateFinalPrice(basePrice);System.out.println("最终价格为: " + finalPrice);// 关闭 Scannerscanner.close();}
}


http://www.ppmy.cn/news/1459990.html

相关文章

FreeRTOS 第十章 事件

信号量可以用来完成同步&#xff0c;但是使用信号量来同步的话任务只能与单个事件或者任务进行同步。有事件某个任务可能会需要与多个事件或者任务同步&#xff0c;此时信号量就无法满足要求了。FreeRTOS提供了一个解决方案&#xff0c;就是事件标记组。 事件位&#xff1a; …

K8s 多租户管理

一、K8s 多租户管理 多租户是指在同一集群中隔离多个用户或团队&#xff0c;以避免他们之间的资源冲突和误操作。在K8s中&#xff0c;多租户管理的核心目标是在保证安全性的同时&#xff0c;提高资源利用率和运营效率。 在K8s中&#xff0c;该操作可以通过命名空间&#xff0…

通过单总线实现单片机之间的数据传输

单总线、没有时钟线的通信时&#xff0c;不能使用简单的高低电平来通信&#xff0c;因为接收方不知道此时发送的数据是第几位数据&#xff0c;容易造成错乱。 因此在使用一根线对外传输数据时&#xff0c;需要自定义一个通信协议&#xff0c;它至少要包含格式头数据&#xff0c…

Spring WebFlux实现获取验证码请求接口?

如果你想让请求处理器返回验证码信息&#xff0c;你可以在处理器函数中生成验证码&#xff0c;并将其作为响应返回给客户端。以下是一个简单的示例&#xff0c;使用 Spring WebFlux 框架生成一个包含随机生成的验证码的图片&#xff0c;并将其作为响应返回给客户端&#xff0c;…

Three.js基础练习——渲染一个立方体

1.学习内容参考了 three.js入门教程--零基础也能学会_threejs菜鸟教程-CSDN博客 本章内容包含渲染立方体&#xff0c;并配合ui工具食用~ 2.效果图 import * as THREE from three import * as dat from dat.gui import { OrbitControls } from three/addons/controls/OrbitC…

GO: 定时器NewTimer、NewTicker 和time.After

Go 之iota iota是一个常量计数器&#xff0c;一般在常量表达式中使用&#xff0c;可以理解为const定义常量的行数的索引&#xff0c;注意是行数 使用场景 主要应用在需要枚举的地方 示例1 package main import "fmt" const (NoPay iota // 订单未支付 0Pai…

微信小程序新技能解锁:轻松实现二维码扫描与识别

微信小程序新技能解锁&#xff1a;轻松实现二维码扫描与识别 在移动互联网时代&#xff0c;二维码已成为连接线上线下的桥梁&#xff0c;而微信小程序作为轻量级应用的代表&#xff0c;自然也少不了二维码扫描与识别的功能。本文将手把手教你如何在微信小程序中集成这项实用功…

神经网络复习--神经网络算法模型及BP算法

文章目录 神经网络模型的构成BP神经网络 神经网络模型的构成 三种表示方式&#xff1a; 神经网络的三要素&#xff1a; 具有突触或连接&#xff0c;用权重表示神经元的连接强度具有时空整合功能的输入信号累加器激励函数用于限制神经网络的输出 感知神经网络 BP神经网络 …