当前位置: 首页 > news >正文

设计模式之模版方法实践

模版方法实践案例

实践之前还是先了解一下模版方法的定义

定义

模板方法模式是一种行为设计模式,它定义了一个骨架,并允许子类在不改变结构的情况下重写的特定步骤。模板方法模式通过在父类中定义一个模板方法,其中包含了主要步骤,而将一些步骤的实现留给子类。这样,子类可以在不改变算法整体结构的情况下,根据需要重新实现某些步骤。

在什么情况下要使用模版方法呢?设计模式不能生搬硬套,而是在一些适合的场景下进行使用,否则会适得其反,可以看看这篇文章http://www.ayqy.net/blog/设计模式总结(《head-first设计模式》学习总结)

进入正题

以下是我项目应用模版方法的代码片段

/*** @Author: HWQ* @Version: 1.0* @Description: 基本api请求*/
public abstract class BaseRequest<O, T extends ResultResponse> {private Map<String, Object> requestParams = new HashMap<>();/*** get方法** @return {@link}*/public abstract String getMethod();/*** 获取路径** @return {@link String}*/public abstract String getPath();/*** 获取响应类** @return {@link Class}<{@link T}>*/public abstract Class<T> getResponseClass();@JsonAnyGetterpublic Map<String, Object> getRequestParams() {return requestParams;}public void setRequestParams(O params) {// 将JSON对象转为Mapthis.requestParams = new Gson().fromJson(JSONUtil.toJsonStr(params), new TypeToken<Map<String, Object>>() {}.getType());}
}

BaseRequest定义了骨架,具体的步骤包括获取请求方法(getMethod)、获取路径(getPath)、获取响应类(getResponseClass)等。

/*** @author HWQ* @date 2024/2/28 11:54* @description*/@Accessors(chain = true)
public class ChatAIRequest extends BaseRequest<ChatAIParams, ResultResponse> {@Overridepublic String getPath() {return "/chatAi";}/*** 获取响应类** @return {@link Class}<{@link NameResponse}>*/@Overridepublic Class<ResultResponse> getResponseClass() {return ResultResponse.class;}@Overridepublic String getMethod() {return RequestMethodEnum.GET.getValue();}
}

ChatAIRequest继承了BaseRequest这个抽象类,实现了获取请求方法(getMethod)、获取路径(getPath)、获取响应类(getResponseClass)

分析一下

好处在哪?

  1. 提高代码一致性

如果我的系统中仅有ChatAIRequest这个类,那我大可不必采用模版方法

问题是我的项目中有大量的Request类,并且这个Request的骨架是相同的,所以这些Request类只需要继承BaseRequest这个抽象类,实现各自的获取请求方法(getMethod)、获取路径(getPath)、获取响应类(getResponseClass)即可

在这里插入图片描述

  1. 减少重复代码: 具体的请求类(例如 chatAiRequest)无需重复实现算法的整体结构,只需专注于实现特定的步骤,如获取请求方法、路径等。这降低了代码的冗余,符合"Don’t Repeat Yourself"(DRY)原则

  2. 提高代码的可维护性: 算法的整体结构集中在 BaseRequest 类中,使得代码更易理解和维护。如果有新的请求类需要添加,只需创建新的具体子类,并实现特定的步骤,而不需要修改已有的代码

http://www.lryc.cn/news/312683.html

相关文章:

  • sql中COALESCE函数详解
  • rust-analyzer报错“Failed to spawn one or more proc-macro servers,....“怎么解决?
  • Communications--9--一文读懂双机热备冗余原理
  • 可调恒定电流稳压器NSI50150ADT4G车规级LED驱动器 提供专业的汽车级照明解决方案
  • Unity中使用代码动态修改URP管线下的标准材质是否透明
  • 关于制作Python游戏全过程(汇总1)
  • 独立站营销新纪元:AI与大数据塑造个性化体验的未来
  • C语言项目实战——贪吃蛇
  • ArmSoM规划开发基于RK3576的开发套件
  • 视频剪辑如何提取伴奏?短视频剪辑有妙方
  • 【Web】浅浅地聊SnakeYaml反序列化两条常见利用链
  • 详解openGauss客户端工具gsql的高级用法
  • 开源工业软件:SCADA系统开源
  • 关于AI彩票预测算法的设想
  • 设计模式之策略模式实践
  • 讨论:解决哈希冲突的几种方法
  • 遥感分析时什么情况下需要做大气校正?
  • 设计模式学习笔记 - 设计原则 - 7.DRY 原则及提高代码复用性
  • 方法的调用
  • VGW在 Windows 平台上局域网就绪的旁路由器程序
  • 能源大数据采集,为您提供专业数据采集服务
  • 01_Maven
  • C语言题目练习
  • 物联网安全|TrustAsia助力PSWG应对全球物联网产品安全合规挑战
  • 基于单片机的医院输液系统设计
  • 安卓简单登录
  • 【计算机网络】DNS/ICMP协议/NAT技术
  • 2403C++,C++20协程通道
  • C语言从入门到实战——预处理详解
  • 【LabVIEW FPGA】CIC滤波器