Template 模板模式定义:
定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中。
模板模式(Template Pattern)是一种行为型设计模式,它定义了一个算法的框架,将一些步骤的实现延迟到子类中,使得子类可以根据自己的需求来实现这些步骤。模板模式使得算法的框架可以被复用,而具体的步骤可以在运行时动态地替换。
模板模式的主要优点有以下几点:
- 复用性:模板模式提供了一个算法的框架,这个框架可以被多次复用,而不需要重新编写整个算法。
- 灵活性:模板模式将算法的框架和具体步骤的实现分离开来,使得算法可以根据具体需求进行灵活的扩展和修改。
- 可维护性:模板模式将算法的复杂度转移到了子类中,使得算法更加可维护和可理解。
模板模式的主要缺点有以下几点:
- 过多地使用模板模式可能会导致代码的重复和冗余。
- 如果算法的框架比较复杂,可能会导致模板类的设计和维护变得困难。
Java 代码示例
abstract class Game {
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
}
class Football extends Game {
@Override
void initialize() {
System.out.println("初始化足球比赛");
}
@Override
void startPlay() {
System.out.println("开始足球比赛");
}
@Override
void endPlay() {
System.out.println("结束足球比赛");
}
}
class Cricket extends Game {
@Override
void initialize() {
System.out.println("初始化板球比赛");
}
@Override
void startPlay() {
System.out.println("开始板球比赛");
}
@Override
void endPlay() {
System.out.println("结束板球比赛");
}
}
class SportsManager {
private Game game;
public SportsManager(Game game) {
this.game = game;
}
public void play() {
game.initialize();
game.startPlay();
game.endPlay();
}
}
public class Main {
public static void main(String[] args) {
SportsManager footballManager = new SportsManager(new Football());
footballManager.play();
SportsManager cricketManager = new SportsManager(new Cricket());
cricketManager.play();
}
}
在这个示例中,Game 是一个抽象类,它定义了一些抽象方法,这些方法的具体实现由子类来完成。Football 和 Cricket 都是 Game 的子类,它们分别实现了自己的 initialize、startPlay 和 endPlay 方法。SportsManager 是一个模板类,它包含了一个 Game 对象,并定义了一个 play 方法,这个方法实现了算法的框架,其中具体步骤的实现由 Game 的子类来完成。在 Main 类中,我们创建了 Football 和 Cricket 的实例,并将它们分别传递给 SportsManager 的构造函数,然后调用 play 方法来执行算法。