别在满屏幕写if-else了。使用策略模式。真香
先看原始伪代码
/**
* 原始逻辑
* @param strategyType 需要判断的值
*/
public void test1(String strategyType){
//传统的if--else判断
if ("one".equals(strategyType)){
// doSomeThing
}else if ("two".equals(strategyType)){
// doSomeThing
}else if(...){...}
// doSomeThing
or
//传统的switch判断
switch (strategyType){
case "one":
//doSomeThing
case "two":
//doSomeThing
default:
//doSomeThing
}
}
看下使用了策略模式,判断逻辑。
/**
* 策略模式
* @param strategyType
*/
public void test2(String strategyType){
//执行与参数相匹配的逻辑
String result = strategy.executeStrategy(strategyType);
// doSomeThing
}
是不是很清爽呢?无论你有多少if分支。case分支。都只要一行代码全部搞定
下面请看全部代码实现吧!
/**
* 定义策略工厂
* 先定义个接口工厂。后面只需要关注实现类就好了
*
* @author AllenQin
*/
public interface StrategyFactory {
/**
* 执行逻辑
*
* @return
*/
String doSomeThing();
}
/**
* 策略1
*
* @author AllenQin
*/
@Component("one")
public class StrategyOne implements StrategyFactory {
@Override
public String doSomeThing() {
return "one";
}
}
/**
* 策略2
*
* @author AllenQin
*/
@Component("two")
public class StrategyTwo implements StrategyFactory {
@Override
public String doSomeThing() {
return "two";
}
}
/**
* 定义策略调用类
*
* @author AllenQin
*/
@Service
public class Strategy {
//将实现了StrategyFactory接口的,统一封装到map里。
@Autowired
Map<String, StrategyFactory> map = new ConcurrentHashMap<>();
/**
* 执行策略
* @param strategyName 传入需要判断的策略即可
* @return
*/
public String executeStrategy(String strategyName){
return map.get(strategyName).doSomeThing();
}
}
小伙伴们,这么写代码是不是看起来非常简洁呢?那么赶快把你们项目中大段的if-eles改造一下吧。
本期内容就到这里啦!我们下期再见。