模板方法模式 java示例
时间: 2023-08-31 13:08:41 浏览: 52
模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
以下是一个使用模板方法模式的 Java 示例:
```
abstract class Game {
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
// 模板方法
public final void play(){
// 初始化游戏
initialize();
// 开始游戏
startPlay();
// 结束游戏
endPlay();
}
}
class Cricket extends Game {
@Override
void endPlay() {
System.out.println("Cricket Game Finished!");
}
@Override
void initialize() {
System.out.println("Cricket Game Initialized! Start playing.");
}
@Override
void startPlay() {
System.out.println("Cricket Game Started. Enjoy the game!");
}
}
class Football extends Game {
@Override
void endPlay() {
System.out.println("Football Game Finished!");
}
@Override
void initialize() {
System.out.println("Football Game Initialized! Start playing.");
}
@Override
void startPlay() {
System.out.println("Football Game Started. Enjoy the game!");
}
}
public class TemplatePatternDemo {
public static void main(String[] args) {
Game game = new Cricket();
game.play();
System.out.println();
game = new Football();
game.play();
}
}
```
在上面的示例中,我们定义了一个抽象类 `Game`,它有三个抽象方法 `initialize()`、`startPlay()` 和 `endPlay()`。这些方法被称为基本方法,由子类实现。
`Game` 类还有一个模板方法 `play()`,该方法定义了游戏的骨架,即游戏的初始化、开始和结束。这个方法是 `final` 类型的,因此子类不能覆盖它。
我们定义了两个子类 `Cricket` 和 `Football`,它们实现了基本方法。在 `TemplatePatternDemo` 类中,我们创建了一个 `Cricket` 对象和一个 `Football` 对象,并调用它们的 `play()` 方法。由于 `play()` 方法是模板方法,因此无论是 `Cricket` 还是 `Football`,它们都会按照相同的顺序执行游戏的初始化、开始和结束,但它们的具体实现是不同的。
运行上面的程序,你将会得到如下输出:
```
Cricket Game Initialized! Start playing.
Cricket Game Started. Enjoy the game!
Cricket Game Finished!
Football Game Initialized! Start playing.
Football Game Started. Enjoy the game!
Football Game Finished!
```
这就是模板方法模式的一个简单示例。