当前位置:   article > 正文

优雅替换if-else,代码更高端_比if else 高级

比if else 高级

记一次代码优化,通过策略模式+工厂+单例取代多if-else

先看个示例
public class SaleDemo {
    public void sale(String code) {
        if ("家电".equals(code)) {
            // 买家电送家电
        } else if ("蔬菜".equals(code)) {
            // 买蔬菜送蔬菜
        } else if ("水果".equals(code)) {
            // 买水果送水果
        } else if ("衣服".equals(code)) {
            // 买衣服送衣服
        } else {
            // 。。。大促销,买啥送啥
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

这还是只是一个空架子,里面在加点逻辑,看起来就比较低端,怎么办?上干货。

1. 策略模式
public interface SaleStrategy {
    public void doThing();
}
  • 1
  • 2
  • 3
public class BuyDQ implements SaleStrategy{
    @Override
    public void doThing() {
    	// 买家电送家电
        System.out.println("买家电送家电");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
public class BuySC implements SaleStrategy{
    @Override
    public void doThing() {
    	// 买蔬菜送蔬菜
        System.out.println("买蔬菜送蔬菜");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
public class BuyYF implements SaleStrategy{
    @Override
    public void doThing() {
    	// 买衣服送衣服
        System.out.println("买衣服送衣服");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

对示例进行第一次优化,如下:

public class SaleDemo {

    public void sale(String code) {
    SaleStrategy strategy = null;
        if ("家电".equals(code)) {
            strategy = new BuyDQ();
        } else if ("蔬菜".equals(code)) {
            strategy = new BuySC();
        } else if ("衣服".equals(code)) {
            strategy = new BuyYF();
        } else {
            // 。。。大促销,买啥送啥
        }
        strategy.doThing();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

咋一看,没什么变法,只是将具体实现提出来,if-else还在。再来!!!第二次优化

2. 单例模式+工厂
public class StrategyFactory {

    static Map<String, SaleStrategy> map;

    static {
        map = new HashMap<>();
        map.put("DQ", new BuyDQ());
        map.put("SC", new BuySC());
        map.put("YF", new BuyYF());
    }

    private StrategyFactory() {

    }

    public static StrategyFactory getInstance() {
        StrategyFactory factory = new StrategyFactory();
        return factory;
    }

    public SaleStrategy getApi(String code) {
        return map.get(code);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
public class StrategyDemoService {
    public void strategyService(String code) {
        SaleStrategy api = StrategyFactory.getInstance().getApi(code);
        api.doThing();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

改造完成,实际调用处不见if-else,是不是感觉高端一点呢。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/377853
推荐阅读
相关标签
  

闽ICP备14008679号