将某些操作的流程在类的方法中定义好,而将这些操作的具体步骤中的逻辑延迟到子类中去实现,这样子类可以在不改变操作流程的情况下,修改具体步骤中的逻辑。
这里定义操作执行流程的方法就称为模板方法,所有的子类都共享该方法,子类的多样性可以通过定义具体步骤的逻辑展现出来。
在模板方法模式中,需要先定义一个抽象父类(AbstractClass),这个父类被称为抽象模板,该类中主要包含两类方法:
final关键字修饰。确定父类具有哪些方法,以及模板方法的执行流程设计
public abstract class AbstractClass{
    // 基本方法1
    protected abstract void doSomething();
    // 基本方法2
    protected abstract void doAnything();
    // 模板方法1, 设计操作的执行流程
    public void templateMethod1() {
        this.doAnything();
        this.doSomething();
    }
    // 模板方法2, 设计操作的执行流程
    public void templateMethod2() {
        this.doSomething();
        this.doAnything();
    }
}子类根据具体的需求实现父类中的基本方法
public class ConcreteClass extends AbstractClass {
    // 根据需求实现基本方法中的逻辑
    protected abstract void doSomething() {
        System.out.println("我是具体的实现,这是我的逻辑,我做点啥呢...");
    }
    // 根据需求实现基本方法中的逻辑
    protected abstract void doAnything() {
        System.out.println("我是具体的实现,这是我的逻辑,我想做啥就做啥...");
    }
}对模板方法的测试
public class Client {
    public static void main(String[] args) {
        AbstractClass myClass = new ConcreteClass();
        // 调用模板方法
        myClass.templateMethod1();
        myClass.templateMethod1();
    }
}原文:https://www.cnblogs.com/sasworld/p/11620031.html