为什么要这么做?
开发订单功能的时候,对订单的业务处理涉及到多种订单类型,对应不同的业务方法,比如市价买入、市价卖出,限价买入、限价卖出,止损买入、止损卖出等等。
很自然的我们会想到用if-else或者switch结构去处理。
我承认我有赌的成分
if ("BUY_MARKET_ORDER".equals(orderType)) {
//市价买入逻辑
} else if ("SELL_MARKET_ORDER".equals(orderType)) {
//市价卖出逻辑
} else if ("BUY_LIMIT_ORDER_GOODS".equals(orderType)) {
//限价买入逻辑
} else if ("SELL_LIMIT_ORDER_GOODS".equals(orderType)) {
//限价卖出逻辑
} else if ("BUY_STOP_ORDER".equals(orderType)) {
//止损买入逻辑
} else if ("SELL_STOP_ORDER".equals(orderType)) {
//止损卖出逻辑
}
else {
//未知订单类型
System.out.println("任务类型无法处理");
}
如果是逻辑代码十分简短的话,if-else是没什么大问题的,思路清晰,分支也很清楚。
但如果需要处理的逻辑较为复杂,会显得if-else非常的臃肿,代码的可读性和可维护性大大的降低。
认识策略模式
策略模式介绍
https://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html
TALK IS CHEAP,SHOW ME THE CODE
https://juejin.im/post/6844903874596175880
潜在的bug
遇到个问题:
context.getBeanOfType(Class)获取不到对应的bean。
debug跟踪到AbstractBeanFactory类中发现其实是抛出异常了
Error creating bean with name 'buyMarketServiceImpl': Requested bean is currently in creation: Is there an unresolvable circular reference?
因为Spring的logger.isTraceEnabled()默认没开,所以没有把错误日志打印出来。
建议handler里面注入bean的方式改为setter注入以解决循环依赖报错的问题。