业务场景
大量if elseif else分支判断场景
-
分支多,代码臃肿,难以维护,可读性低 。
-
如果需要接入一种新的判断分支,那只能在原有代码上修改 。违背了面向对象编程的开闭原则 以及单一原则 。
策略模式实现
-
一个接口或者抽象类,里面两个方法(一个方法匹配类型,一个可替换的逻辑实现方法)
-
不同策略的差异化实现(就是说,不同策略的实现类)
-
使用策略模式
接口
public interface AbstractHandler extends InitializingBean {
/**
* 执行方法
*
* @param request
* @return
* @throws
*/
Response execute(Request request);
}
工厂策略
public class StrategyFactory {
private static Map<String, AbstractHandler> strategyMap = new HashMap<>();
public static AbstractHandler getInvokeStrategy(String routing) {
return strategyMap.get(routing);
}
public static void register(String routing, AbstractHandler handler) {
// 如果输入进来的键值是空,不符合要求就直接返回
if (StringUtils.isEmpty(routing) || handler == null) {
throw new IllegalArgumentException("路由不符合要求");
}
strategyMap.put(routing, handler);
}
}
不同策略
@Component
public class OneHandler implements AbstractHandler {
@Override
public Response execute(Request request) {
// TODO
return response;
}
@Override
public void afterPropertiesSet() throws Exception {
StrategyFactory.register("OneRouting", this);
}
}
@Component
public class TwoHandler implements AbstractHandler {
@Override
public Response execute(Request request) {
// TODO
return response;
}
@Override
public void afterPropertiesSet() throws Exception {
StrategyFactory.register("TwoRouting", this);
}
}
调用
StrategyFactory.getInvokeStrategy("custom routing");
End