1.针对一段逻辑,用传统的if...else...
/** * 传统的 if else 解决方法 */ public String getCheckResult(String order) { if ("校验1".equals(order)) { return "执行业务逻辑1"; } else if ("校验2".equals(order)) { return "执行业务逻辑2"; }else if ("校验3".equals(order)) { return "执行业务逻辑3"; }else if ("校验4".equals(order)) { return "执行业务逻辑4"; }else if ("校验5".equals(order)) { return "执行业务逻辑5"; }else if ("校验6".equals(order)) { return "执行业务逻辑6"; }else if ("校验7".equals(order)) { return "执行业务逻辑7"; }else if ("校验8".equals(order)) { return "执行业务逻辑8"; }else if ("校验9".equals(order)) { return "执行业务逻辑9"; } return "不在处理的逻辑中返回业务错误"; }
2.使用策略模式改进
public class BizService3 { private BizUnitService bizUnitService = new BizUnitService(); private Map<String, Function<String, String>> checkResultDispatcherComX = new HashMap<>(); @Test public void test1(){ checkResultDispatcherComXInit(); System.out.println(getCheckResultComX("订单", 1)); } /** * 初始化 业务逻辑分派Map 其中value 存放的是 lambda表达式 */ public void checkResultDispatcherComXInit() { checkResultDispatcherComX.put("key_订单1", order -> bizUnitService.bizOne(order)); checkResultDispatcherComX.put("key_订单1_订单2", order -> bizUnitService.bizTwo(order)); checkResultDispatcherComX.put("key_订单1_订单2_订单3", order -> bizUnitService.bizThree(order)); } public String getCheckResultComX(String order, int level) { //写一段生成key的逻辑: String ley = getDispatcherComXKey(order, level); Function<String, String> result = checkResultDispatcherComX.get(ley); if (result != null) { //执行这段表达式获得String类型的结果 return result.apply(order); } return "不在处理的逻辑中返回业务错误"; } /** * 判断条件方法 */ private String getDispatcherComXKey(String order, int level) { StringBuilder key = new StringBuilder("key"); for (int i = 1; i <= level; i++) { key.append("_" + order + i); } return key.toString(); } }
public class BizUnitService { public String bizOne(String order) { return order + "各种花式操作1"; } public String bizTwo(String order) { return order + "各种花式操作2"; } public String bizThree(String order) { return order + "各种花式操作3"; } }
易读,易扩展