模板模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变算法的结构即可重新定义该算法的某些特定步骤。
在Java中,模板模式通常通过抽象类来实现。下面是一个使用模板模式的示例代码,以及详细的解释:
// 抽象类,定义了模板方法和基本操作
abstract class Game {
// 模板方法,定义了游戏的基本流程
final void play() {
initialize();
startPlay();
endPlay();
}
// 初始化游戏
abstract void initialize();
// 开始游戏
abstract void startPlay();
// 结束游戏
abstract void endPlay();
}
// 具体实现类1
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!");
}
}
// 具体实现类2
class Basketball extends Game {
@Override
void initialize() {
System.out.println("Basketball Game Initialized! Start playing.");
}
@Override
void startPlay() {
System.out.println("Basketball Game Started. Enjoy the game!");
}
@Override
void endPlay() {
System.out.println("Basketball Game Finished!");
}
}
public class TemplatePatternDemo {
public static void main(String[] args) {
Game game = new Football();
game.play(); // 执行足球游戏流程
System.out.println();
game = new Basketball();
game.play(); // 执行篮球游戏流程
}
}
详解:
-
抽象类
Game
:play()
方法是模板方法,定义了游戏的基本流程。这个方法是final
的,意味着子类不能重写这个方法,从而保证了算法结构的稳定性。initialize()
,startPlay()
,endPlay()
是抽象方法,由具体的子类实现。这些方法代表游戏的不同阶段,子类可以根据需要提供具体的实现。
-
具体实现类
Football
和Basketball
:- 这两个类分别实现了
Game
类的抽象方法。每个方法都提供了特定的实现,以完成各自的游戏逻辑。 - 例如,
Football
类在initialize()
方法中打印 "Football Game Initialized! Start playing.",在startPlay()
方法中打印 "Football Game Started. Enjoy the game!",在endPlay()
方法中打印 "Football Game Finished!"。
- 这两个类分别实现了
-
客户端代码
TemplatePatternDemo
:- 在
main
方法中,创建了Football
和Basketball
对象,并调用它们的play()
方法。由于play()
方法是在Game
类中定义的模板方法,因此它会按照定义的顺序依次调用initialize()
,startPlay()
,endPlay()
方法。 - 输出结果展示了不同游戏的具体实现。
- 在
总结:
模板模式通过在抽象类中定义一个模板方法来控制算法的执行顺序,同时允许子类覆盖某些步骤以提供具体的实现。这种模式的优点在于它能够复用代码、减少重复,并且使得算法的结构更加清晰。
标签:Java,void,Football,game,模式,Game,设计模式,方法,模板 From: https://blog.csdn.net/LA1245780/article/details/143182312