织梦确定网站风格,wordpress 菜单跳转,做基因互作的网站,网站建设项目需求说明一、背景
上周在迁移项目MQ工程的时候#xff0c;重新Review代码#xff0c;发现有一段代码综合使用了策略模式和模板方法#xff0c;下面讲解一下具体场景应用的思路。
二、模板方法
策略模式前段时间有一个关于库存具体案例#xff0c;详见 库存管理与策略模式。
模板…一、背景
上周在迁移项目MQ工程的时候重新Review代码发现有一段代码综合使用了策略模式和模板方法下面讲解一下具体场景应用的思路。
二、模板方法
策略模式前段时间有一个关于库存具体案例详见 库存管理与策略模式。
模板方法封装了一个固定流程该流程由几个步骤完成具体步骤由子类实现从而让固定的流程产生不同的结果。它本质就是抽象封装流程具体进行实现。 使用场景程序主框架相同细节不同可以使用模板方法。
模板方法一个最常见的应用场景是在服务端架构中一般定义before、process、after三个方法before做一些参数验证process主逻辑、after资源释放资源或其它非核心逻辑。
三、实际应用案例
在项目中当配送单开始配送时需要给用户发送短信和微信通知消息告知用户快递单号当订单完成或将小程序加入我的小程序时也需要给用户加积分这里采用MQ进行解藕和异步化具体见类图和下面的分析 1、MQ消息Tag对应一种业务事件类型比如 订单支付、订单退款、配送单开始配送、配送单用户签收、将小程序添加到我的小程序、注册用户、分享海报等。
2、上述业务事件完成后都有可能会触发要给用户发送短信、发送微信通知消息、加积分。
3、模板方法AbstractBaseHandler定义了模板方法调用sendSms、sendWxMsg、addintegral抽象方法封装了具体流程具体子类去实现如果不需要该功能就空实现。
4、策略模式AbstractBaseHandler 可以认为是抽象策略接口TagHandlerManager可以认为是环境上下文类。
代码流程
1、SpringBoot应用启动时具体的实现类会被注册到环境上下文 中比如OrdPayFinishMsgHandler加载时会通过BaseHandler的init方法将它自己注册到TagHandlerManager
的ConcurrentHashMap中Key和MQ中的Tag相同。
2、TopicVanMessageConsumerImpl接收到MQ消息后根据Message中的Tag从TagHandlerManager中获取具体的实现类然后通过接口方式调用process方法的具体实现。
3、如果有更多的业务事件类型直接扩展Handler处理类实现模板方法即可。