网站建设服务标准,瓷砖网站源码,有了域名后怎样做网站,网站建设销售模式模版方法实践案例
实践之前还是先了解一下模版方法的定义
定义
模板方法模式是一种行为设计模式#xff0c;它定义了一个骨架#xff0c;并允许子类在不改变结构的情况下重写的特定步骤。模板方法模式通过在父类中定义一个模板方法#xff0c;其中包含了主要步骤#xf…模版方法实践案例
实践之前还是先了解一下模版方法的定义
定义
模板方法模式是一种行为设计模式它定义了一个骨架并允许子类在不改变结构的情况下重写的特定步骤。模板方法模式通过在父类中定义一个模板方法其中包含了主要步骤而将一些步骤的实现留给子类。这样子类可以在不改变算法整体结构的情况下根据需要重新实现某些步骤。
在什么情况下要使用模版方法呢设计模式不能生搬硬套而是在一些适合的场景下进行使用否则会适得其反可以看看这篇文章http://www.ayqy.net/blog/设计模式总结《head-first设计模式》学习总结
进入正题
以下是我项目应用模版方法的代码片段
/*** Author: HWQ* Version: 1.0* Description: 基本api请求*/
public abstract class BaseRequestO, T extends ResultResponse {private MapString, 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 ClassT getResponseClass();JsonAnyGetterpublic MapString, Object getRequestParams() {return requestParams;}public void setRequestParams(O params) {// 将JSON对象转为Mapthis.requestParams new Gson().fromJson(JSONUtil.toJsonStr(params), new TypeTokenMapString, Object() {}.getType());}
}BaseRequest定义了骨架具体的步骤包括获取请求方法(getMethod)、获取路径(getPath)、获取响应类(getResponseClass)等。
/*** author HWQ* date 2024/2/28 11:54* description*/Accessors(chain true)
public class ChatAIRequest extends BaseRequestChatAIParams, ResultResponse {Overridepublic String getPath() {return /chatAi;}/*** 获取响应类** return {link Class}{link NameResponse}*/Overridepublic ClassResultResponse getResponseClass() {return ResultResponse.class;}Overridepublic String getMethod() {return RequestMethodEnum.GET.getValue();}
}ChatAIRequest继承了BaseRequest这个抽象类实现了获取请求方法(getMethod)、获取路径(getPath)、获取响应类(getResponseClass)
分析一下
好处在哪
提高代码一致性
如果我的系统中仅有ChatAIRequest这个类那我大可不必采用模版方法
问题是我的项目中有大量的Request类并且这个Request的骨架是相同的所以这些Request类只需要继承BaseRequest这个抽象类实现各自的获取请求方法(getMethod)、获取路径(getPath)、获取响应类(getResponseClass)即可 减少重复代码 具体的请求类例如 chatAiRequest无需重复实现算法的整体结构只需专注于实现特定的步骤如获取请求方法、路径等。这降低了代码的冗余符合Don’t Repeat YourselfDRY原则 提高代码的可维护性 算法的整体结构集中在 BaseRequest 类中使得代码更易理解和维护。如果有新的请求类需要添加只需创建新的具体子类并实现特定的步骤而不需要修改已有的代码