前言
对于很多程序员,平时写代码为了方便,可能一股脑就按面向过程那样一下把业务逻辑编写下来,少有会去额外思考设计模式或者算法。这种情况其实不利于我们的编码维护,在本文,将介绍设计模式中的观察者模式,通过本文的介绍将帮助你快速理解和应用。
1、什么是模板模式?
模板模式是一种行为设计模式,模板模式的核心思想是将共同的算法流程封装在一个抽象类中,具体实现则在子类中实现。通俗点说,就是完成一件事情,有固定的数个步骤,但是每个步骤根据对象的不同,而实现细节不同;就可以在父类中定义一个完成该事情的总方法,按照完成事件需要的步骤去调用其每个步骤的实现方法。每个步骤的具体实现,由子类完成。
2、模板模式的结构
模板模式包括以下几个角色:
(1)抽象类(Abstract Class)
定义了算法的骨架,包含了一些抽象方法和具体方法,抽象方法由子类来实现。抽象类是模板模式的核心,它包含了一个模板方法和多个具体方法
(2)具体类(Concrete Class)
实现了抽象类中的抽象方法,以便在模板方法中被调用。每个具体类实现的具体方法可以不同,但是它们都共享抽象类中定义的具体方法
3、模板模式的实现
现在有这么一个场景,对接某某银行的接口,正常业务接口调用方式采用post+Json的方式,文件上传类型的接口采用from表单提交,文件下载类型的接口采用get获取流数据。那么我们有一个固定的请求流程,则可以抽取一个模板父类。具体的实现交给子类去实现
调用的接口的业务流程是这样的
1、组装请求参数和请求方式
2、发起请求
3、接收返回参数并组装
创建模板父类
public abstract class AbstractBankRequestService {
/**
* 组装请求参数
*/
protected abstract void beforeRequest();
/**
* 发起请求
*/
protected abstract void requestApi();
/**
* 处理返回参数
*/
protected abstract void afterRequest();
public final void doRequest() {
beforeRequest();
requestApi();
afterRequest();
}
}
创建实现子类
表单提交请求子类
public class FormRequestService extends AbstractBankRequestService {
@Override
protected void beforeRequest() {
System.out.println("form表单提交-----提交前");
}
@Override
protected void requestApi() {
System.out.println("form表单提交-----提交");
}
@Override
protected void afterRequest() {
System.out.println("form表单提交-----提交后");
}
}
接口测试
@GetMapping(value = "/template", produces = MediaType.APPLICATION_JSON_VALUE)
public void template() {
FormRequestService formRequestService = new FormRequestService();
formRequestService.doRequest();
}