前言
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
https://www.toutiao.com/a6627799628555223555/
模板设计模式在书中定义:
定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。
通俗点的理解就是 :完成一件事情,有固定的数个步骤,但是每个步骤根据对象的不同,而实现细节不同;就可以在父类中定义一个完成该事情的总方法,按照完成事件需要的步骤去调用其每个步骤的实现方法。每个步骤的具体实现,由子类完成。
使用场景:
1、在多个子类中拥有相同的方法,而且逻辑相同时,可以将这些方法抽出来放到一个模板抽象类中。
2、程序主框架相同,细节不同的情况下,也可以使用模板方法。
代码实现
我们将创建一个定义操作的 Game 抽象类,其中在该类中定义模板方法并设置为 final,这样它就不会被重写。模板方法定义游戏通用基本骨架:开始游戏和结束游戏 。basketball和 Football 是扩展了 Game 的实体类,它们重写了抽象类的方法。
设计类:抽象类、实现子类
1、创建一个抽象类,它的模板方法被设置为 final。
public abstract class GameTemplate {
abstract void startPlay();
abstract void endPlay();
//模板方法
public final void play(){
//开始游戏
startPlay();
//结束游戏
endPlay();
}
}
2、创建扩展了上述类的实体类。
public class Basketball extends GameTemplate {
@Override
void endPlay() {
System.out.println("Basketball Game Finished!");
}
@Override
void startPlay() {
System.out.println("Basketball Game Started. Enjoy the game!");
}
}
public class Football extends Game {
@Override
void endPlay() {
System.out.println("Football Game Finished!");
}
@Override
void startPlay() {
System.out.println("Football Game Started. Enjoy the game!");
}
}
演示
public class TemplatePatternDemo {
public static void main(String[] args) {
Game game = new Basketball();
game.play();
System.out.println();
game = new Football();
game.play();
}
}