这几天接手项目,项目中有一些小问题,需要我优化修改,拿到代码,我直接人傻了,一句注释都没有,而且一段代码竟然if-else了十多次,哇哦,相信看过别人代码的小伙伴都懂这种感受。那么,我们如何优化if-else这种需要判断多次的呢?下面我来教你!
假设有个需求,是优惠券的需求,这里需要判断是哪种优惠券,一般写法:
if (coupon.getType()==0){
...
}else if(coupon.getType()==1){
...
}else if(coupon.getType()==2){
...
}else if(coupon.getType()==3){
...
}else{
...
}
这里写的比较少,大家看起来可能感觉没什么问题,但是如果我再加优惠券的类型呢,比如现有的是满减券,折扣券,立减券,通用券,我这时候再来一个组合券,再来一个随机券。。。等等 这个时候,else-if就更多了,多到怀疑人生了,这个时候,不妨用用策略+工厂模式来优化我们的代码
首先,我们把每个条件逻辑代码块,抽象成一个公共的接口,可以得出以下代码:
public interface ICouponService {
void employ();
}
我们根据每个逻辑条件,定义相对应的策略实现类,可得以下代码:
public class MoneyOffServiceImpl implements ICouponService{
@Override
public void employ() {
System.out.println("这里是满减券");
}
}
public class DiscountServiceImpl implements ICouponService{
@Override
public void employ() {
System.out.println("这里是折扣券");
}
}
接下来,我们再定义策略工厂类,用来管理这些勋章实现策略类,如下:
public class CouponServiceFactory {
private static final Map<String , ICouponService> map = new HashMap<>();
static {
map.put("discount", new DiscountServiceImpl());
map.put("moneyOff", new MoneyOffServiceImpl());
}
public static ICouponService getCouponService(String couponType){
return map.get(couponType);
}
}
使用了策略+工厂模式之后,代码变得简洁多了,如下:
public static void main(String[] args) {
ICouponService couponService = CouponServiceFactory.getCouponService("discount");
couponService.employ();
}