美文网首页
学习笔记:设计模式之模板模式

学习笔记:设计模式之模板模式

作者: 大力papa | 来源:发表于2020-10-23 11:13 被阅读0次

本文仅供学习交流使用,侵权必删。
不作商业用途,转载请注明出处

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);
    }
}

持续更新...

相关文章

网友评论

      本文标题:学习笔记:设计模式之模板模式

      本文链接:https://www.haomeiwen.com/subject/nhrpmktx.html