模板设计模式(Template Pattern)

描述: 定义一个操作中的算法骨架,而将具体的步骤延迟到子类当中。模板方法子类不改变一个算法的结构即可重新定义算法的实现

核心思想: 在父类中定义算法的执行步骤顺序,由子类来具体实现,但不能改变执行顺序

使用场景:

  • 有多个子类共有的方法,且逻辑相同。
  • 重要的、复杂的方法,可以考虑作为模板方法。

模板设计模式的优点:

  • 封装不变部分,扩展可变部分。
  • 提取公共代码,便于维护。
  • 行为由父类控制,子类实现。

模板设计模式的缺点

  • 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大

示例:

  • 抽象出一个模板对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
interface Game {
void initialize();
void startPlay();
void endPlay();

//模板
default void play(){
//初始化游戏
initialize();

//开始游戏
startPlay();

//结束游戏
endPlay();
}
}
  • 不同对象的实现类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class  Cricket implements  Game{

@Override
public void initialize() {
System.out.println("Cricket 初始化");
}

@Override
public void startPlay() {
System.out.println("Cricket 开始");

}

@Override
public void endPlay() {
System.out.println("Cricket 退出结束");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 class Football implements Game {

@Override
public void endPlay() {
System.out.println("Football 初始化");
}

@Override
public void initialize() {
System.out.println("Football 开始");
}

@Override
public void startPlay() {
System.out.println("Football 退出结束");
}
}
  • 调用
1
2
3
4
5
6
7
8
9
10
public class Test {
public static void main(String[] args) {

Game game = new Cricket();
game.play();
System.out.println();
game = new Football();
game.play();
}
}