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

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

设计,策略对应 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学习道场

欢迎关注微信公众号 : IT学习道场