将某些操作的流程在类的方法中定义好,而将这些操作的具体步骤中的逻辑延迟到子类中去实现,这样子类可以在不改变操作流程的情况下,修改具体步骤中的逻辑。
这里定义操作执行流程的方法就称为模板方法,所有的子类都共享该方法,子类的多样性可以通过定义具体步骤的逻辑展现出来。
在模板方法模式中,需要先定义一个抽象父类(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