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

    易读,易扩展

  • 相关阅读:
    HTML 之轮播图
    Django 框架之 URL
    Django 框架搭建入门案例
    Python 操作 MySQL
    Python 之RabbitMQ使用
    Python 之协程
    Python 之网络编程
    Python 序列化
    Python 装饰器
    python(3)-内置函数
  • 原文地址:https://www.cnblogs.com/sglx/p/13231027.html
Copyright © 2011-2022 走看看