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 关键词