zoukankan      html  css  js  c++  java
  • java8策略模式

    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";
        }
    
    }

    易读,易扩展

  • 相关阅读:
    sqlserver 服务器主体 无法在当前安全上下文下访问数据库
    【转】ASP.NET"正在中止线程"错误原因
    【转载】好的用户界面-界面设计的一些技巧
    新浪博客“网络繁忙请稍后再试”
    Mac上好用的视频播放器有哪些?
    Mac上好用的视频播放器有哪些?
    游戏平台代表--PS4【推荐】
    游戏平台代表--PS4【推荐】
    ospf剩余笔记
    ospf剩余笔记
  • 原文地址:https://www.cnblogs.com/sglx/p/13231027.html
Copyright © 2011-2022 走看看