模板模式+上下文
时间: 2023-07-04 19:23:40 浏览: 57
模板模式与上下文模式可以结合使用,以便更好地实现某些特定场景下的业务逻辑。下面是一个简单的示例,演示了如何使用模板模式和上下文模式。
```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!");
}
}
class GameContext {
private Game game;
public GameContext(Game game) {
this.game = game;
}
public void play() {
game.play();
}
}
public class TemplateContextPatternDemo {
public static void main(String[] args) {
GameContext gameContext = new GameContext(new Cricket());
gameContext.play();
System.out.println();
gameContext = new GameContext(new Football());
gameContext.play();
}
}
```
在这个示例中,我们创建了一个 `GameContext` 类来封装 `Game` 对象,并提供一个 `play()` 方法来调用 `Game` 对象的 `play()` 方法。这个类使用上下文模式,将具体的 `Game` 对象的实例化与模板方法的调用分离开来。这样,我们可以在不改变模板方法的情况下,动态地更换 `Game` 对象。
上面的代码同样演示了如何使用模板模式来实现一个游戏框架,其中 `Game` 类定义了一个模板方法 `play()`,并由具体的子类实现各自的业务逻辑。这个游戏框架可以通过上下文对象来动态地更换具体的游戏。