设计模式之策略模式应⽤实例(SpringBoot如何⼲掉ifelse)需求
这⾥虚拟⼀个业务需求,让⼤家容易理解。假设有⼀个订单系统,⾥⾯的⼀个功能是根据订单的不同类型作出不同的处理。
订单实体:
service接⼝:
传统实现
根据订单类型写⼀堆的if else:
策略模式实现
利⽤策略模式,只需要两⾏即可实现业务逻辑:
可以看到上⾯的⽅法中注⼊了HandlerContext,这是⼀个处理器上下⽂,⽤来保存不同的业务处理器,具体在下⽂会讲解。我们从中获取⼀个抽象的处理器AbstractHandler,调⽤其⽅法实现业务逻辑。
现在可以了解到,我们主要的业务逻辑是在处理器中实现的,因此有多少个订单类型,就对应有多少个处理器。以后需求变化,增加了订单类型,只需要添加相应的处理器就可以,上述OrderServiceV2Impl完全不需改动。
spring boot原理和设计模式
我们先看看业务处理器的写法:
⾸先每个处理器都必须添加到spring容器中,因此需要加上@Component注解,其次需要加上⼀个⾃定义注解@HandlerType,⽤于标识该处理器对应哪个订单类型,最后就是继承AbstractHandler,实现⾃⼰的业务逻辑。
⾃定义注解 @HandlerType:
抽象处理器 AbstractHandler:
⾃定义注解和抽象处理器都很简单,那么如何将处理器注册到spring容器中呢?
具体思路是:
1、扫描指定包中标有@HandlerType的类;
2、将注解中的类型值作为key,对应的类作为value,保存在Map中;
3、以上⾯的map作为构造函数参数,初始化HandlerContext,将其注册到spring容器中;我们将核⼼的功能封装在HandlerProcessor类中,完成上⾯的功能。HandlerProcessor:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。