策略模式:顾名思义,按照不同的情况选择对应的对策略的模式
设计,策略对应 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;}@Overridepublic 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学习道场*/@Componentpublic class FirstHandler implements Handler {private static final int code = HandlerEnum.first.getCode();@Overridepublic boolean handle() {System.out.println(HandlerEnum.first.getDesc() + "开始执行业务......");return true;}@Overridepublic int getCode() {return code;}}
第二个处理器
import org.springframework.stereotype.Component;/*** 描述: 第二个处理器 </br>* 时间: 2022-01-15 14:13 </br>* 作者:it学习道场*/@Componentpublic class SecondHandler implements Handler {private static final int code = HandlerEnum.second.getCode();@Overridepublic boolean handle() {System.out.println(HandlerEnum.second.getDesc() + "开始执行业务......");return true;}@Overridepublic int getCode() {return code;}}
第三个处理器
import org.springframework.stereotype.Component;/*** 描述: 第三个处理器 </br>* 时间: 2022-01-15 14:13 </br>* 作者:it学习道场*/@Componentpublic class ThirdHandler implements Handler {private static final int code = HandlerEnum.third.getCode();@Overridepublic boolean handle() {System.out.println(HandlerEnum.third.getDesc() + "开始执行业务......");return true;}@Overridepublic 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学习道场*/@Componentpublic class StrategyFactory {@Autowiredprivate 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




