暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

spring版本策略模式(超实用)

IT学习道场 2022-06-22
413

策略模式:顾名思义,按照不同的情况选择对应的对策略的模式

设计,对应 code枚举,决策谋略对应不同的类的执行方法,往下看

直接上代码

策略处理器枚举

    /**
    * 描述: 策略处理器枚举 </br>
    * 时间: 2022-01-15 14:03 </br>
    * 作者:it学习道场
    */
    public enum HandlerEnum {
    first(1,"第一个处理器"),
    second(2,"第二个处理器"),
    third(3,"第三个处理器")
    ;
    private int code;
    private String desc;


    HandlerEnum(int code, String desc) {
    this.code = code;
    this.desc = desc;
    }


    public int getCode() {
    return code;
    }


    public void setCode(int code) {
    this.code = code;
    }


    public String getDesc() {
    return desc;
    }


    public void setDesc(String desc) {
    this.desc = desc;
    }


    @Override
    public String toString() {
    return "HandlerEnum{" +
    "code=" + code +
    ", desc='" + desc + '\'' +
    '}';
    }
    }
    策略模式顶级处理器抽象
      /**
      * 描述: 策略模式顶级处理器抽象 </br>
      * 时间: 2022-01-15 14:01 </br>
      * 作者:it学习道场
      */
      public interface Handler {
      /**
      * 执行业务逻辑抽象方法
      * @return
      */
      boolean handle();


      /**
      * 获取code方法
      * @return
      */
      int getCode();
      }
      第一个处理器
        import org.springframework.stereotype.Component;


        /**
        * 描述: 第一个处理器 </br>
        * 时间: 2022-01-15 14:13 </br>
         * 作者:it学习道场
        */
        @Component
        public class FirstHandler implements Handler {
        private static final int code = HandlerEnum.first.getCode();
        @Override
        public boolean handle() {
        System.out.println(HandlerEnum.first.getDesc() + "开始执行业务......");
        return true;
        }


        @Override
        public int getCode() {
        return code;
        }
        }
        第二个处理器
          import org.springframework.stereotype.Component;


          /**
          * 描述: 第二个处理器 </br>
          * 时间: 2022-01-15 14:13 </br>
           * 作者:it学习道场
          */
          @Component
          public class SecondHandler implements Handler {
          private static final int code = HandlerEnum.second.getCode();
          @Override
          public boolean handle() {
          System.out.println(HandlerEnum.second.getDesc() + "开始执行业务......");
          return true;
          }


          @Override
          public int getCode() {
          return code;
          }
          }
          第三个处理器
            import org.springframework.stereotype.Component;


            /**
            * 描述: 第三个处理器 </br>
            * 时间: 2022-01-15 14:13 </br>
             * 作者:it学习道场
            */
            @Component
            public class ThirdHandler implements Handler {
            private static final int code = HandlerEnum.third.getCode();
            @Override
            public boolean handle() {
            System.out.println(HandlerEnum.third.getDesc() + "开始执行业务......");
            return true;
            }


            @Override
            public int getCode() {
            return code;
            }
            }
            策略工厂
              import org.springframework.beans.factory.annotation.Autowired;
              import org.springframework.stereotype.Component;


              import java.util.Map;
              import java.util.concurrent.ConcurrentHashMap;


              /**
              * 描述: 策略工厂 </br>
              * 时间: 2022-01-15 14:17 </br>
              * 作者:it学习道场
              */
              @Component
              public class StrategyFactory {
              @Autowired
              private Map<String, Handler> handlerBeanMap = new ConcurrentHashMap<>();


              /**
              * 根据code获取对应处理器
              * @param code handler的code码
              * @return Handler - 处理器
              */
              public Handler getHandler(int code){
              for (String beanName : handlerBeanMap.keySet()) {
              Handler handler = handlerBeanMap.get(beanName);
              if (handler.getCode() == code){
              return handler;
              }
              }
              return null;
              }
              }
              测试
                import org.springframework.context.annotation.AnnotationConfigApplicationContext;


                /**
                * 描述: 工厂处理器测试 </br>
                * 时间: 2022-01-15 14:24 </br>
                 * 作者:it学习道场
                */
                public class StrategyTest {


                public static void main(String[] args) {
                AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
                context.register(StrategyFactory.class,FirstHandler.class,SecondHandler.class,ThirdHandler.class);
                context.refresh();
                StrategyFactory bean = context.getBean(StrategyFactory.class);
                //1-对应第一个处理器,2-对应第二个处理器,3-对应第三个处理器
                     Handler handler = bean.getHandler(HandlerEnum.first.getCode());
                handler.handle();
                }
                }

                自己来测试下吧


                文章转载自IT学习道场,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论