Java8 IF ELSE IF 优化

白色玫瑰 程序猿

时间: 2023-05-22 阅读: 1 字数:4866

{}
Java8 IF ELSE IF 优化现象解决方式if else ifswitch case弊端Java8的实现 现象 在程序中总会看到或者碰到很多根据key判断要执行的方法代码等等, ![流程示意图]...

Java8 IF ELSE IF 优化

<a href="#_2">现象</a>    <a href="#_6">解决方式</a>    
 
  <a href="#if_else_if_7">if else if</a>      <a href="#switch_case_18">switch case</a>      <a href="#_35">弊端</a>      <a href="#Java8_39">Java8的实现</a>            

现象

在程序中总会看到或者碰到很多根据key判断要执行的方法代码等等; 简单流程示意图

解决方式

if else if

if(StringUtils.equals(key,"1")){
    //逻辑1
} else if (StringUtils.equals(key,"2")){
    //逻辑2
}
//...类型越多代码越繁多

switch case

    switch (key){
    case "1":
       //逻辑1
       break;
    case "2":
       //逻辑2
       break;
    /*
    ...
     */
    default:
       //默认处理
    }

弊端

类型越多代码越多, 维护不易 后来人读起来跳脚骂娘

Java8的实现

直接上代码:

@Controller
@RequestMapping("/dc/spring/mvc/ifElse")
public class OptimizationIfElseController {
    /*
      这里多入参可以考虑放到一个实体里面,使用Function
      如果因业务原因必须多入参两个入参使用BiFunction
      再多入参考虑柯里化方式Function<String,BiFunction<String,Map<String, Object>,String>>
      map.put("1",key->(instuCde,param)-> interface(key,instuCde,param));
    */
   Map<String, BiFunction<String,Map<String, Object>,String>> map = new HashMap<>();

   @RequestMapping(value = "/getIfElse/{code}", produces = "text/plain;charset=UTF-8")
   public @ResponseBody String getIfElse(@PathVariable("code") String code) {
      Map< String,Object> map = new HashMap<>();
      map.put("Test1","TestValue");
      return getReturn(code,"Dc",map);
   }
    /**
    * map初始化 构造函数 > @Autowired > @PostConstruct
    */
   @PostConstruct
   public void mapInit(){
      map.put("1",(instuCde,param)-> new OptimizationIfElse1ServiceImpl().testReturn(instuCde,param));
      map.put("2",(instuCde,param)-> new OptimizationIfElse2ServiceImpl().testReturn(instuCde,param));
      map.put("3",(instuCde,param)-> new OptimizationIfElse3ServiceImpl().testReturn(instuCde,param));
   }

   /**
    * 执行程序
    * @param className
    * @param instuCde
    * @param param
    * @return
    */
   private String getReturn(String className,String instuCde, Map<String, Object> param){
      try {
         BiFunction<String,Map<String, Object>,String> function = map.get(className);
         if (Optional.ofNullable(function).isPresent()){
            return function.apply(instuCde,param);
         }
         return "非正常业务逻辑!";
      } catch (Exception e) {
         return "业务异常!";
      }
   }
}

OptimizationIfElse1ServiceImpl ,OptimizationIfElse2ServiceImpl ,OptimizationIfElse3ServiceImpl 代码差不多只是为了测试,不再全部上了

@Service
public class OptimizationIfElse1ServiceImpl implements OptimizationIfElseService {
   @Override
   public String testReturn(String instuCde, Map<String, Object> param) {
      return StrUtil.format("测试类1【{}】{}",instuCde, JSONObject.toJSONString(param));
   }
}

执行结果 运行1结果 运行2结果 运行3结果 非业务逻辑结果 Java8的这种方式看着比较优雅,比策略模式看上去更简易,而且阅读起来,各种key要执行的方法在初始化的时候看起来一目了然,更容易理解。 共勉!

原文地址:https://blog.csdn.net/Dc253061007/article/details/107122697?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168474994416800226590860%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168474994416800226590860&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-26-107122697-null-null.142^v87^control_2,239^v2^insert_chatgpt&utm_term=java%E4%BC%98%E5%8C%96

本文章网址:https://www.sjxi.cn/detil/a82079af635041b5a4fc56876005f1c0

最新评论

当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号