策略模式与模板方法结合案例

一、背景

上周在迁移项目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处理类,实现模板方法即可。

相关推荐
峥嵘life5 小时前
Android16 开机后立即打开相机闪退问题分析与解决总结
android·开发语言·数码相机·策略模式
智慧城市20301 天前
关键供应商连续交付不合格批次,说明质量风险可能持续存在。企业需要建立“批次隔离、加严检验、驻厂遏制、复检放行、供应商升级”的处置闭环,同时统筹保供。
数据分析·策略模式·战略咨询·流程管理
happy_baymax2 天前
Dell G3 3590 黑苹果实战:OpenCore 1.0.8 + NullMoth 驱动让 GTX 1660 跑起 Metal
策略模式
遇码2 天前
macOS 触摸板捏合在 GPUI 里无响应:vendor 打补丁,把手势合成为 cmd+滚轮事件
rust·图形渲染·策略模式·桌面应用·gpui
mmsx3 天前
Android 架构分层:MVVM 与 MVP 共存,网络层怎么切
android·策略模式·mvvm·mvp
博风3 天前
7、设计模式应用举例:策略模式:加密、解密文件
设计模式·策略模式
mmsx3 天前
Android 本地优先的三级语义理解降级链
android·数码相机·策略模式
早点睡觉好了3 天前
LangChain 源码入门 02:消息、ChatPromptTemplate 与 Chat Model 调用链
ai·langchain·策略模式
花间相见4 天前
【计算基础|网络12】TCP 抓包与经典边界问题
网络·tcp/ip·策略模式
花间相见4 天前
【计算基础|网络11】TCP(下):拥塞控制与参数优化
网络·tcp/ip·策略模式