The Template Method Pattern – 模板方法模式

模板方法模式抽象出算法执行流程进行封装,强制调用此方法的运行时类都按照此流程执行

流程中的具体步骤可由子类实现,钩子函数赋予子类决定是否执行此步骤的权利

高层设计框架严格执行流程

public abstract class AbstractBase {
 
    public abstract void stepOne();
 
    public abstract void stepTwo();
 
    public abstract void stepThree();
 
    public abstract boolean isStepThreeChosen();
 
    private void stepMutual() {
        System.out.println("execute StepMutual()");
    }
 
    public final void execute() {               // 模板方法规定了各步骤执行顺序,子类不可覆写
        stepOne();                              // 由子类实现的步骤
        stepTwo();                              // 由子类实现的步骤
        if (isStepThreeChosen()) stepThree();   // 由子类决定是否执行此步骤
        stepMutual();                           // 强制子类执行其不可见不可更改的步骤
    }
}

底层负责具体步骤的实现

class Sub extends AbstractBase {
 
    @Override
    public void stepOne() {
        System.out.println("execute Sub's StepOne()");
    }
 
    @Override
    public void stepTwo() {
        System.out.println("execute Sub's StepTwo()");
    }
 
    @Override
    public void stepThree() {
        System.out.println("execute Sub's StepThree()");
    }
 
    @Override
    public boolean isStepThreeChosen() {
        return false;
    }
}

测试

class TestDemo {
    public static void main(String[] args) {
        new Sub().execute();
    }
}
execute Sub's StepOne()
execute Sub's StepTwo()
execute StepMutual()

应用

封装公用组件的初始化流程:由各实现类按需选择自身部件
封装公用算法:如JDK1.8的Arrays.sort(T[] a, Comparator<? super T> c),sort函数提供排序模板,Comparator接口实现方法提供排序算法中的比较细节

参考资料

Freeman E, Robson E. Head First Design Patterns: Building Extensible and Maintainable Object-Oriented Software[M]. Second Edition. O’Reilly, 2020.

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

©2018-2024 Howell版权所有 备案号:冀ICP备19000576号