概述
模板方法模式(Template Method Pattern)
是一种行为型设计模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下重新定义算法中的某些步骤。模板方法模式通过将不变的行为搬移到超类,去除了子类中的重复代码。
使用场景
- 当要在多个子类中共享通用的算法结构时。
- 当希望子类在特定步骤上提供特定实现,但整体算法不变时。
- 当希望通过扩展子类来实现算法的某些步骤时。
结构
模板方法模式包含以下几个部分:
- 抽象类(AbstractClass):定义了算法的骨架,并包含一个模板方法和若干个抽象方法,供子类实现。
- 具体类(ConcreteClass):实现抽象类中定义的抽象方法,从而完成算法中相关步骤的具体实现。
代码实现
下面是一个 Java 实现模板方法模式的例子,展示了如何通过模板方法模式定义算法的骨架并在子类中实现具体步骤。
示例代码:
// 抽象类,定义了模板方法和基本操作
abstract class Game {
// 模板方法
public final void play() {
initialize();
startPlay();
endPlay();
}
// 基本操作(抽象方法)
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
}
// 具体类,实现了基本操作
class Cricket extends Game {
@Override
void initialize() {
System.out.println("Cricket Game Initialized! Start playing.");
}
@Override
void startPlay() {
System.out.println("Cricket Game Started. Enjoy the game!");
}
@Override
void endPlay() {
System.out.println("Cricket Game Finished!");
}
}
class Football extends Game {
@Override
void initialize() {
System.out.println("Football Game Initialized! Start playing.");
}
@Override
void startPlay() {
System.out.println("Football Game Started. Enjoy the game!");
}
@Override
void endPlay() {
System.out.println("Football Game Finished!");
}
}
// 客户端代码
public class TemplateMethodPatternDemo {
public static void main(String[] args) {
Game game = new Cricket();
game.play();
System.out.println();
game = new Football();
game.play();
}
}