求求你们别再if-else判断那么多了!

1,110 阅读1分钟

这几天接手项目,项目中有一些小问题,需要我优化修改,拿到代码,我直接人傻了,一句注释都没有,而且一段代码竟然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();
}