通过策略模式 干掉掉 if else

如何替换掉,我们平常使用的 if...else,switch...case逻辑

整个流程 大概就是:项目启动时,以@HandlerType注解中的类型值作为key,注解修饰的 class 作为value,初始化到 map中,然后根据key动态取class。

懂了吧。

 

技术涉及:Spring 钩子 BeanFactoryPostProcessor

                   自定义注解(元注解)

    具体详情请访问 三大不留点百度电卡姆 搜索     

完整项目地址:https://github.com/tianzhiyuanemail/gandiao_ifelse         

策略模式实现

利用策略模式,只需要两行即可实现业务逻辑:

type:传入值

a()方法:传入值所对应的业务方法

通过策略模式 干掉掉 if else_第1张图片

ok,让我们看看是咋实现的,首先定义了一个HandlerProcessor类,继承了 BeanFactoryPostProcessor,然后

1、扫描指定包中标有@HandlerType注解的类;

2、将@HandlerType注解中的类型值作为key,对应的类作为value,保存在Map中;

3、以上面的map作为构造函数参数,初始化HandlerContext,将其注册到spring容器中

(BeanFactoryPostProcessor是针对整个容器的后置处理器,他被触发时机是在IoC容器加载完各种配置后,还没执行Bean的初始化之前。)

通过策略模式 干掉掉 if else_第2张图片

ok, 再看看

AbstractHandler instance = handlerContext.getInstance(type); 中 handlerContext.getInstance(type)干了点啥:根据传入的值,在map中获取响应的 class(class:三个业务类),然后获取对应的bean。

通过策略模式 干掉掉 if else_第3张图片

 

ok,最后instance.a();  就调用了,type值 所对应类中的业务逻辑方法,这就替代了 if(type == value){ 业务逻辑 }  。

 

ok,再看看AbstractHandler里面写了啥:

通过策略模式 干掉掉 if else_第4张图片

ok,再看看具体的每个业务方法:

通过策略模式 干掉掉 if else_第5张图片

通过策略模式 干掉掉 if else_第6张图片通过策略模式 干掉掉 if else_第7张图片

ok,这里写了三个业务处理方法,都继承了AbstractHandler 类;

 

ok,再看看 这个自定义注解是咋写的

通过策略模式 干掉掉 if else_第8张图片
就是赋了个值。

 

你可能感兴趣的:(spring,boot,如何,干掉if..else)