一.定义
当某个任务的执行步骤固定时,可以将这个步骤封装到一个方法里,这个方法固定不变,子类可以对具体的步骤有不同的实现,也可以使用父类默认的实现。
属于行为型模式
二.写法
封装一个抽象类,定义执行固定步骤任务的方法,
public abstract class AbstractTaskTemplate {
protected void execute() {
step1();
step2();
step3();
}
protected void step1() {
System.out.println("step1默认实现");
}
protected void step2() {
System.out.println("step2默认实现");
}
protected void step3() {
System.out.println("step3默认实现");
}
}
定义一个TaskA类,继承抽象模板类,重写step2方法
public class TaskA extends AbstractTaskTemplate{
@Override
protected void step2() {
System.out.println("子类A对step2进行覆盖,自己定义");
}
}
定义一个TaskB类,继承抽象模板类,重写step1方法
public class TaskB extends AbstractTaskTemplate{
@Override
protected void step1() {
System.out.println("子类B对step1进行覆盖,自己定义");
}
}
测试类
public class Test {
public static void main(String[] args) {
TaskA taskA = new TaskA();
taskA.execute();
System.out.println();
TaskB taskB = new TaskB();
taskB.execute();
}
}
输出结果
三.模板方法模式在源码中的应用
HttpServlet
四.模板方法模式的优缺点
优点:将重复的代码放在父类中,提高代码的复用性;符合开闭原则
缺点:类数量增多