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

news2024/11/16 13:26:51

一、背景

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1063628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能银行卡明细筛选与统计,轻松掌握账户总花销!

作为现代生活的重要组成部分,银行卡成为了我们日常消费和收入的主要途径。但是,当我们需要了解自己的银行卡账户的总花销时,繁琐的明细筛选和统计工作常常让人头疼。现在,让我们向您推荐一款智能银行卡明细筛选与统计工具&#xf…

基于SpringBoot的学生选课系统

基于SpringBoot的学生选课系统的设计与实现,前后端分离 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 前台主页 登录界面 管理员界面 教师界面 学生界面 摘要 学生选课系统…

halcon 数字识别

文章目录 素材交互选取区域阈值分割特征提取识别字符显示全部代码 素材 dev_get_window(WindowHandle) **读取图像 read_image(Image,C:/Users/Augustine/Desktop/1.png) **把图像转正,镜像方式 mirror_image(Image,ImageMirror,row) mirror_image(ImageMirror,Imag…

Python 无废话-基础知识面向对象编程详解

类定义 如何理解万物皆对象? 生活中一些事物,动物(可爱的小狗、调皮的小猫)、交通工具(比亚迪U8汽车、飞机)、人(学生、教师)…… 这些对象都有着独特或共性的属性和方法来描述其…

Android:实现Camera前后双摄

效果展示 一.概述 本博文讲解如何实现手机前后两颗摄像头同时预览并显示 我之前博文《OpenGLES:GLSurfaceView实现Android Camera预览》对单颗摄像头预览做过详细讲解,而前后双摄实现原理其实也并不复杂,粗糙点说就是把单摄像头预览流程写两…

Pytorch之MobileNetV3图像分类

💂 个人主页:风间琉璃🤟 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 前言 由于传统卷积神经网络, 内存需求大、 运算量大导致无法在移动…

多线程JUC

文章目录 多线程一.什么是多线程二.多线程的两个概念三.线程的实现方式四.常见的成员方法五.线程安全的问题六.死锁七.生产者和消费者 多线程 一.什么是多线程 进程:是程序的基本执行实体 理解:每一个运行的软件就是一个进程 线程:是操做系统能够进行运算调度的最小单位,它…

Halcon 从基础到精通-02- 开发基于HALCON的应用

HALCON的应用通过HDevelop应用来构建原型。HDevelop的开发主要有3种形式。 Start from Scratch: 手动通过脚本,把HDevelop的代码转化为一般的编程语言。如,上一节提到,其实,每个operators,也许并不一样,需要依据HALC…

开发工具箱 —— it-tools

文章目录 开发工具箱 —— it-tools安装访问效果 开发工具箱 —— it-tools 安装 docker 安装教程:在 CentOs7 中安装宝塔面板和 Docker(包括MySQL,Redis) docker 安装命令 docker run -d --name it-tools --restart unless-st…

[unity]保存文件的路径设置

序 比如,序列化了一个数组,保存到磁盘上。 原来的路径是"D://test.bin",能跑,但是有点问题:序列化出来的文件和原项目离的太远,不好管理。 要是能保存到unity工程的文件夹里就好了。这个路径该…

c#设计模式-行为型模式 之 责任链模式

🚀简介 又名职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对 象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为…

学员自述:上位机编程培训经历

、大家好,我是华山编程培训中心的学员 之前是从事PLC编程工作的,在C#语言这一块是零基础,之前也尝试过自学,但对于类啊继承啊堆栈这些基本的概念始终是无法理解,直到看到华山培训的视频,并参与朱老师的直播…

番外--命令操作

------------- task00: 00:常用文件目录类命令1-18.(pwd; cd;ls; more;less;head;tail; mkdir;rmdir;cp;mv;rm&#xff1b…

pandas 笔记:asfreq

1 方法介绍 asfreq 是一个在 Pandas 时间序列数据分析中常用的方法。这个方法主要用于改变时间序列的频率。asfreq 可以帮助我们将一个时间序列从一个频率转换为另一个频率 2 基本用法 DataFrame.asfreq(freq, methodNone, howNone, normalizeFalse, fill_valueNone)3 参数说…

实验室超声波(提取)萃取技术有哪些实际的应用?

梵英超声(fanyingsonic)实验室超声波清洗机 超声波具有“空化现象”,“机械振动”以及“热效应”等特性。“空化现象”可产生瞬间几千个压力,使提取介质的微小气泡压缩、爆裂、破碎被提取原料和细胞壁,加速天然药用成分的溶出,“机…

微服务技术栈-Docker应用部署

文章目录 前言一、数据卷二、Docker 应用部署1、MySQL部署2、Tomcat部署3、Nginx部署4、Redis部署5、Kafka部署 总结 前言 之前文章讲到过,docker运行程序的过程就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器,接下来我们将…

虫情测报灯——一种农业虫情防治工具

KH-CQPest虫情测报灯是一种农业虫情防治工具,它可以通过光源或药物诱虫的方式,吸引害虫撞击撞击屏,通过远红外自动处理技术,无公害杀死害虫的同时保存害虫标本,利用高像素的摄像头拍照、农业四情测报平台识别害虫&…

简单两步实现离线部署ChatGPT,ChatGPT平替版,无需GPU离线搭建ChatGPT

文末附主程序安装包和大模型参数文件~ 演示效果如下图所示: 一、使用方法 软件主要分为两个部分:GPT4ALL软件主体(主程序)模型参数(离线模型),如果使用API Key的话则不需要下载模型参数。 可以…

家居家纺经营配送小程序商城的作用是什么

家居家纺产品是每个家庭都必备的,无论商场还是小摊贩,市场中经营商家数量都比较多,而随着互联网电商发展,在实际经营中,传统线下商家也面临多个难题: 首先就是获客问题,线下渠道推广宣传方式单…

深刻解析数据库技术的要点以及应对策略 (软件设计师笔记)

😀前言 在信息化的时代背景下,数据已经成为了推动各行各业发展的核心要素之一。数据的储存、管理、维护、和获取变得尤为关键,确保信息的高效流通和决策的科学性。数据库技术,正是在这一背景下发挥着举足轻重的作用,它…