- 代码
- 总结
1. 类图
2. 代码
- 总抽象类Game——提供模板
public abstract class Game {
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
public final void play(){ //模板
initialize(); //初始化游戏
startPlay(); //开始游戏
endPlay(); //结束游戏
}
}
- 具体实现类
public 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!");
}
}
public 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();
}
}
3. 总结
优点:
- 提供了模板,封装不变部分,扩展可变部分
- 代码复用
注:
- 为防止恶意操作,一般模板方法都加上 final 关键词