本文仅供学习交流使用,侵权必删。
不作商业用途,转载请注明出处
WHAT 什么是模板模式
模板模式(Template Method Design Pattern),就是在方法中预先定义好一个代码的流程骨架,将某些步骤的逻辑实现放到子类中去实现。子类可以只关注需要实现的方法,无需了解整个算法流程。
记得之前看过servlet,AQS和类加载的功能源码等都会用到模板设计方法。
WHY 为什么使用模板模式
优点
- 提高代码的复用,将不变的业务流程抽象父类方法中,子类可以复用父类的业务流程代码,只需要编写特定的业务逻辑即可
- 提高代码扩展性,将不变的代码封装到父类中,可扩展的部分延迟到子类中实现。当出现新的业务变更时,只需要扩展一个新的子类去实现即可。
缺点
- 每增加一个不同的实现都需要增加一个新的子类,有可能会造成子类个数较多。
HOW 模板模式的实现(JAVA)
场景:企业与各行方数据都有对应的上传接口,每个银行的上传数据方式都不一样,调用restful,ws或者ftp上传等。但上传流程骨架整体都是一样,都是获取数据、校验数据、上传以及上传后处理。针对这种方式,我们把不变的流程骨架代码抽象出来,将变化的业务逻辑延迟到子类里面实现
- 上传接口父类
public abstract class UploadService {
public final void execute(String payload) {
List lst = getData(payload);
if (lst != null && lst.size() > 0) {
if (validation(lst)) {
upload(lst);
afterUpload(payload);
} else {
// TODO: 抛出校验失败异常
}
}
}
abstract List getData(String payload);
abstract boolean validation(List lst);
abstract void upload(List lst);
abstract void afterUpload(String payload);
}
- 上传接口子类实现
public class BankCommUploadService extends UploadService {
@Override
List getData(String payload) {
return Arrays.asList("bankcomm1", "bankcomm2", "bankcomm3");
}
@Override
boolean validation(List lst) {
return true;
}
@Override
void upload(List lst) {
System.out.println("bankcomm upload");
lst.forEach(data -> {
System.out.println(data);
});
}
@Override
void afterUpload(String payload) {
System.out.println("upload success: " + payload);
}
}
网友评论