模板方法设计模式是一种行为型设计模式,其核心思想是定义一个算法的骨架,而将一些步骤延迟到子类中实现。这种模式通过将共同的行为封装在一个模板方法中,以确保各个子类在不改变算法结构的情况下可以重新定义特定步骤的实现。
说人话: 就是定义了一个流程,具体的流程中的操作细节交给子类来实现。
举个例子: 每个上班族(抽象父类)的一天,起床、上班、下班,这是打工人一天,但是每个人(子类)的上班内容不一样。
假设这是一个人一天的生活
public abstract class OneDay {
// 使用final来防止被子类重写
public final void flow(){
eatBreakfast();
eatLunch();
playGame();
}
protected void eatBreakfast(){
System.out.println("吃早饭");
}
protected void eatLunch(){
System.out.println("吃午饭");
}
protected void playGame(){
System.out.println("打游戏");
}
}
public class Thursday extends OneDay{
@Override
protected void eatLunch() {
System.out.println("疯狂星期四,我要吃KFC");
}
}
今天比较特殊,因为今天是星期四,其他的流程不变,只是从平常的 "午饭" 变成了 "KFC"
好处:
- 实现了最大化代码复用。父类的模板方法和已实现的某些步骤会被子类继承而直接使用;
- 既统一了算法,也提供了很大的灵活性。父类的模板方法确保了算法的结构保持不变,同时由子类提供部分步骤的实现
使用场景
执行过程中一系列步骤基本相同: 当需要完成一个过程,这个过程涉及一系列步骤,这些步骤在整体上是相同的,但在具体实现时可能有所不同。这时可以考虑使用模板方法模式。通过在父类中定义一个模板方法,将这些共同的步骤抽象出来,而将不同的实现细节延迟到子类中去实现,以实现代码的重用和减少重复性工作。