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

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

作者: 大力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