java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Template Pattern模板模式

Java设计模式之Template Pattern模板模式详解

作者:十维豆脑

这篇文章主要介绍了Java设计模式之Template Pattern模板模式详解,模板模式(Template Pattern)行为型模式之一,抽象父类定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,需要的朋友可以参考下

一、定义

模板模式(Template Pattern):行为型模式之一,抽象父类定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。

二、UML类图

在这里插入图片描述

三、角色职责

抽象类/抽象模板(Abstract Class):抽象模板类,负责给出一个算法的轮廓和骨架。 它

由一个模板方法和若干个基本方法构成。这些方法的定义如下:

具体子类/具体实现(Concrete Class):具体实现类,实现抽象类中所定义的抽象方法和钩子方法,它们是一个顶级逻辑的一个组成步骤。

四、代码实现

前言:在平时工作中就经常会用到模板方法,就像我们公司的框架里使用的Excel导入功能EasyExcel,就是一个非常典型的模板方法,我们通常会顶一个抽象类并在里面规定出一些模板方法和基本方法,再由具体的实现类去进行调用或者重写,下面就用代码给大家举个栗子。

导入抽象类(抽象类 Abstract Class)

abstract class ImportAbstractClass {
    public void TemplateMethod() {
        validateColumn();
        validateField();
        bizHandle();
    }
    public void validateColumn() {
        System.out.println("校验导入Excel的列名...");
    }
    public abstract void validateField();
    public abstract void bizHandle();
}

导入订单实现类(具体子类 Concrete Class)

public class ImportOrderClass extends ImportAbstractClass {
    @Override
    public void validateField() {
        System.out.println("校验导入订单字段...");
    }
    @Override
    public void bizHandle() {
        System.out.println("订单业务处理...");
    }
}

导入商品实现类(具体子类 Concrete Class)

public class ImportProductClass extends ImportAbstractClass {
    @Override
    public void validateField() {
        System.out.println("校验导入商品字段...");
    }
    @Override
    public void bizHandle() {
        System.out.println("商品业务处理...");
    }
}

测试类

public class TemplateTest {
    public static void main(String[] args) {
        ImportAbstractClass order = new ImportOrderClass();
        order.TemplateMethod();
        ImportAbstractClass product = new ImportProductClass();
        product.TemplateMethod();
    }
}

输出结果

校验导入Excel的列名...
校验导入订单字段...
订单业务处理...
校验导入Excel的列名...
校验导入商品字段...
商品业务处理...

五、源码分析

模板模式的应用场景非常多,就比如我们常用的MyBatis中的BaseExecutor类就使用到了模板模式。

在这里插入图片描述

在主流程中,我们可以直接调用query方法,也可以通过实现抽象方法doQuery进行使用。

六、优缺点分析

优点:

缺点:

七、适用场景

八、总结

当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑模板方法模式来处理。模板模式只是在一定程度上完成了解耦的操作,当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行文搬移到单一的地方(提取公有部分,抽象成抽象方法),这样就帮助子类摆脱重复的不变行为的纠缠。

到此这篇关于Java设计模式之Template Pattern模板模式详解的文章就介绍到这了,更多相关Template Pattern模板模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文