gpt4 book ai didi

java - 我该如何改进这段代码?

转载 作者:行者123 更新时间:2023-11-30 07:31:32 26 4
gpt4 key购买 nike

public class OrderProcessor {

public Double calculateTotalPriceWithDiscountCode(Order order,
char discountCode) {

Double itemTotal = order.getItemTotal();
Double discountAmount = 0.0;

switch (discountCode) {
case 'A':
discountAmount = 0.95 * itemTotal;
break;
case 'B':
discountAmount = 0.15 * itemTotal;
break;
}
return itemTotal - discountAmount;
}

订单处理器中的当前实现已关闭扩展并开放修改以添加新的折扣代码,我如何改进设计以摆脱此限制

最佳答案

一般来说,switch 的存在是一个很好的赠品,表明什么应该是一个类。所以,第一次尝试应该是这样的:

public interface Discounter {
public double applyDiscount(double itemTotal);
}

public class OrderProcessor {
private Map<Char, Discounter> discounts = new HashMap<Char, Discounter>();

public void addDiscounter(Char discountCode, Discounter discounter) {
discounts.put(discountCode, discounter);
}

public Double calculateTotalPriceWithDiscountCode(Order order, char discountCode) {
double itemTotal = order.getItemTotal();
double discountAmount = 0.0;

if (discounts.hasKey(discountCode))
discountAmount = discounter.applyDiscount(itemTotal);

return itemTotal - discountAmount;
}
}

这将通过这样的方式扩展:

processor.addDiscounter('A', new Discounter() {
public double applyDiscount(double itemTotal) {
return 0.95 * itemTotal;
}
});

你也可以做一个 remove 方法,然后你的折扣器可以变得更复杂,引用外部数据等。你可能想稍微打开接口(interface)并传入整个订单以进行更多检查。

注意:如果这是您要在生产中做的事情,我有两条不请自来的建议:

  1. 考虑使用像 JBoss Drools 这样的东西处理您的业务逻辑而不是这个;它更加强大和灵活。

  2. 请不要使用double 进行实际的财务计算。 :)

关于java - 我该如何改进这段代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7291248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com