public Double computePrice(String type, Double price) {
if ("VIP".equals(type)) {
// 普通会员9折优惠
return price * 0.9;
} else if ("S_VIP".equals(type)) {
// 超级会员8折优惠
return price * 0.8;
} else {
// 非会员无优惠
return price;
}
}
几天后。。。
产品经理:我们增加了活动送的一个月体验会员,与普通会员享受同等九折待遇,但是只能享受最高20的优惠金额。
靓仔:明白,不就是“穷逼vip”吗
于是就在原来的代码上改了改
public Double computePrice(String type, Double price) {
if ("VIP".equals(type)) {
// 普通会员9折优惠
return price * 0.9;
} else if ("S_VIP".equals(type)) {
// 超级会员8折优惠
return price * 0.8;
} else if ("BEGGAR_VIP".equals(type)) {
// 穷逼vip 9折优惠,最大优惠金额20
return price > 200 ? (price - 20) : price * 0.9;
}else {
// 非会员无优惠
return price;
}
}
有没有觉得 if-else 特别多,而且一旦再增加会员种类,那么看上去就更繁琐,代码耦合严重,维护起来十分不方便。
怎么办,重构一下代码呗
首先提取出价格计算的接口类
public interface PriceStrategy {
Double computePrice(Double price);
}
然后针对不同的会员类型,实现不同会员价格计算接口,提供算法
// 普通会员
public class VipPriceStrategy implements PriceStrategy{
@Override
public Double computePrice(Double price) {
return price * 0.9;
}
}
// 超级会员
public class SVipPriceStrategy implements PriceStrategy{
@Override
public Double computePrice(Double price) {
return price * 0.8;
}
}
// 穷逼会员
public class BeggarVipPriceStrategy implements PriceStrategy{
@Override
public Double computePrice(Double price) {
return price > 200 ? (price - 20) : price * 0.9;
}
}
增加一个上下文角色,封装算法对高层屏蔽,高层模块只用访问Context
public class PriceContext {
private PriceStrategy priceStrategy;
public PriceContext(PriceStrategy priceStrategy) {
this.priceStrategy = priceStrategy;
}
public Double computePrice(Double price) {
return priceStrategy.computePrice(price);
}
}
外部调用,计算价格
public Double getPrice(String type, Double price) {
PriceStrategy priceStrategy;
if ("VIP".equals(type)) {
priceStrategy = new VipPriceStrategy();
} else if ("S_VIP".equals(type)) {
priceStrategy = new SVipPriceStrategy;
} else if ("BEGGAR_VIP".equals(type)) {
priceStrategy = new BeggarVipPriceStrategy;
} else {
return price;
}
PriceContext priceContext = new PriceContext(priceStrategy);
return priceContext.computePrice(price);
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。