java编程-策略模式

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

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

        计算机票优惠价格

import java.util.Scanner;

// 定义舱位类型枚举
enum CabinClass {
    FIRST_CLASS,
    ECONOMY_CLASS
}

// 定义价格计算策略接口
interface PricingStrategy {
    double calculatePrice(double basePrice);
}

// 实现具体的价格计算策略
class PeakSeasonFirstClassPricing implements PricingStrategy {
    @Override
    public double calculatePrice(double basePrice) {
        return basePrice * 0.9;
    }
}

class PeakSeasonEconomyPricing implements PricingStrategy {
    @Override
    public double calculatePrice(double basePrice) {
        return basePrice * 0.85;
    }
}

class OffPeakSeasonFirstClassPricing implements PricingStrategy {
    @Override
    public double calculatePrice(double basePrice) {
        return basePrice * 0.7;
    }
}

class OffPeakSeasonEconomyPricing implements PricingStrategy {
    @Override
    public 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);

        // 关闭 Scanner
        scanner.close();
    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值