【Java 开发】模版模式使用模版

在日常开发中,对适合的场景。使用模板模式可以帮助我们抽取公共的东西,使代码更加优雅。本次写了一个模版模式的使用模版,方便以后 cv。

本次是以订单的接受、拒绝、关闭三个操作作为 demo 来写的模板。

一、定义请求基类,不同操作的不同类

// 请求命令基类
public abstract class OrderRequest {protected Long orderId;// 其他通用字段
}// 具体请求命令类
public class CloseOrderRequest extends OrderRequest {// 关闭订单特有的字段
}public class AcceptOrderRequest extends OrderRequest {// 接受订单特有的字段
}public class RejectOrderRequest extends OrderRequest {// 拒绝订单特有的字段
}

二、定义模版

// 抽象执行器基类
@Componentpublic abstract class OrderProcessTemplate<T extends OrderRequest> {public void processOrder(T request) {// 通用的订单处理逻辑checkRequest(request);// 调用子类实现的特定处理逻辑handleOrder(request);// 其他通用的后续处理// ...}protected abstract void handleOrder(T request);private void checkRequest(T request) {// 通用的请求校验逻辑}
}

三、定义不同的子类实现

// 具体执行器类
@Service
public class CloseOrderService extends OrderProcessTemplate<CloseOrderRequest> {@Overrideprotected void handleOrder(CloseOrderRequest request) {// 处理关闭订单的特定逻辑}
}@Service
public class AcceptOrderService extends OrderProcessTemplate<AcceptOrderRequest> {@Overrideprotected void handleOrder(AcceptOrderRequest request) {// 处理接受订单的特定逻辑}
}@Service
public class RejectOrderService extends OrderProcessTemplate<RejectOrderRequest> {@Overrideprotected void handleOrder(RejectOrderRequest request) {// 处理拒绝订单的特定逻辑}
}

四、最后

我是 xiucai,一位后端开发工程师。

如果你对我感兴趣,请移步我的个人博客,进一步了解。

  • 文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎点赞和关注😊
  • 本文首发于个人博客,未经许可禁止转载💌

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

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

相关文章

leecode42 DP

自己的暴力想法,把图形看成一个个碗,一段一段地算,错误示例 class Solution { public:int trap(vector<int>& height) {int s height.size();int sum 0,kk1;int flag 0;int p1 -1, p2 -1;for (int i 1; i < s; i) {cout<<p1<<endl;if (p1 >…

网络安全技术与应用:远程控制与数据库安全

实验准备 软件&#xff1a;VMware Workstation Pro 虚拟机&#xff1a;Red Hat Enterprise Linux 7 服务器&#xff0c;Red Hat Enterprise Linux 7 客户端 网络模式&#xff1a;NAT模式 1、配置服务器及客户端网络 服务器IP 客户端IP 测试相互通信 在客户机上设置镜像&#…

【C++刷题】优选算法——递归第二辑

全排列 vector<vector<int>> vv; void dfs(vector<int>& nums, vector<int>& v, vector<bool>& check) {if(v.size() nums.size()){vv.push_back(v);return;}for(int i 0; i < nums.size(); i){if(check[i] false){v.push_ba…

pillow学习5

ImageEnhance 模块 内置的 ImageEnhance 模块中包含了多个用于增强图像效果的函数&#xff0c;主要用来调整图像 的色彩、对比度、亮度和清晰度等&#xff0c;感觉上和调整电视机的显示参数一样。 在模块 ImageEnhance 中&#xff0c;所有的图片增强对象都实现一个通用的接口。…

nginx的配置以及常见命令

Nginx配置与常用命令指南 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP服务器。由于它的稳定性、丰富的功能集、简单的配置文件和低资源消耗&#xff0c;Nginx在全球范围内被广泛使用。在本文中&#xff0c;我们将介绍Nginx的基本配置和一些常…

车载网络测试实操源码_使用CAPL脚本模拟发送符合协议要求(Counter和CRC)的CAN报文

系列文章目录 车载网络测试实操源码_使用CAPL脚本解析hex、S19、vbf文件 车载网络测试实操源码_使用CAPL脚本对CAN报文的Counter和CRC进行实时监控 车载网络测试实操源码_使用CAPL脚本模拟发送符合协议要求(Counter和CRC)的CAN报文 车载网络测试实操源码_使用CAPL脚本实现安全…

利用神经网络学习语言(四)——深度循环神经网络

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型&#xff1a;从线性回归到通用人工智能》&#xff0c;欢迎有兴趣的读者多多支持。 本文涉及到的代码链接如下&#xff1a;regression2chatgpt/ch10_rnn/char_rnn_batch.ipynb 《循环神经网络&#xff08;RNN&…

【移花接木】OpenCV4.8 For Java 深度学习 实时人脸检测

学习《OpenCV应用开发&#xff1a;入门、进阶与工程化实践》一书&#xff0c;学会本文所有技能就这么简单&#xff01; 做真正的OpenCV开发者&#xff0c;从入门到入职&#xff0c;一步到位&#xff01; 前言 我写这篇文章之前&#xff0c;我搜索整个网络文章跟问各种语言大模…

速卖通测评揭秘:如何选择安全的渠道操作

许多商家对测评存在误解&#xff0c;认为只需进行几次测评就能迅速打造爆款。实际上&#xff0c;测评是一个需要计划和持久性的过程&#xff0c;以便让平台检测到产品的受众程度并提高产品的曝光和权重。 在进行测评时&#xff0c;安全是首要考虑的问题。平台可以通过设备、网…

黑马点评1——短信篇(基于session)

&#x1f308;hello&#xff0c;你好鸭&#xff0c;我是Ethan&#xff0c;一名不断学习的码农&#xff0c;很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 &#x1f3c3;人生之义&#xff0c;在于追求&#xff0c;不在成败&#xff0c;勤通…

如何使用多种算法解决LeetCode第135题——分发糖果问题

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

WPF 的 style 定义 使用 继承 复用

style 样式 如何定义一个 style 样式 <Button Content"样式" Width"100" Height"50"><Button.Style><Style></Style></Button.Style></Button>拥有的属性 targetType “” 针对什么类型生效setter 设置属…

Ubuntu中 petalinux 安装 移植linux --tftp/tftp-hpa服务的方法

Xilinx 文档 PetaLinux 指南&#xff1a;如何创建 PetaLinux 环境 &#xff08;2019.1&#xff09; PetaLinux工具参考指南 PetaLinux安装详解(Xilinx , linux, zynq, zynqMP) petalinux 2020.1安装教程 一、PetaLinux工具和库安装 PetaLinux 工具要求主机系统 /bin/sh 为“b…

18.网络编程

网络编程 又称为Socket编程。 Java中网络编程主要是以Java语言完成信息数据在网络上的传输。 网络 计算机网络&#xff0c;指的是将不同地理位置的多台计算机连接起来&#xff0c;可以实现信息共享和信息传输。 Java是Internet上的语言&#xff0c;提供了对网络应用程序的…

笔记 | 《css权威指南》

网络安全色 URL text-indent line-height & vertical-align 字体 font-weight 400 normal 700 bold background-attachment

SpringBoot项目集成JetCache缓存框架步骤

JetCache是阿里开源的基于java开发的缓存框架&#xff0c;支持多种缓存类型&#xff1a;本地缓存、分布式缓存、多级缓存。能够满足不同业务场景的缓存需求。 1.导入依赖 <!--jetcache缓存 --> <dependency><groupId>com.alicp.jetcache</groupId>&l…

【调试笔记-20240516-Windows-使用VS2019编译edk2(上)】

调试笔记-系列文章目录 调试笔记-20240516-Windows-使用VS2019编译edk2&#xff08;上&#xff09; 文章目录 调试笔记-系列文章目录调试笔记-20240516-Windows-使用VS2019编译edk2&#xff08;上&#xff09; 前言一、安装开发工具1. 安装 VS20192. 安装 Python 3.103. 安装 …

pdf加水印怎么加?3种添加水印方法分享

pdf加水印怎么加&#xff1f;PDF加水印不仅是为了保护文档内容&#xff0c;确保信息的安全性和完整性&#xff0c;更是一种有效的版权保护措施。通过添加水印&#xff0c;您可以在文档中嵌入公司名称、日期、编号等信息&#xff0c;以明确文档的归属权和使用限制。此外&#xf…

小而美:两步完成从源码到应用的极简交付

作者&#xff1a;花三&#xff08;王俊&#xff09; Serverless 应用引擎 SAE 是阿里云推出的一款零代码改造、极简易用、自适应弹性的容器化应用托管平台&#xff0c;面市以来为几万家企业客户提供服务&#xff0c;运行稳定&#xff0c;广受好评。 SAE 的出现解决了众多企业…

Python库之lxml的简介、安装、使用方法详细攻略

Python库之lxml的简介、安装、使用方法详细攻略 简介 lxml是一个用于处理XML和HTML文档的Python库&#xff0c;它提供了简单易用的API来解析和生成这些文档。lxml以其性能和易用性而受到广泛欢迎&#xff0c;特别适合于需要处理大量数据或需要高性能解析的场景。 安装 安装…