模板模式 - 图1

理解:

有一个抽象类A模板,里面提供了一些默认的抽象方法 m1,m2,m3,m4 固定的模板方法,还需要一个final 修饰的实现方法mRun,方法mRun里面有默认抽象方法的执行顺序;

有多个对抽象类A模板实现类 A1、A2,实现类需要实现模板类里面的抽象方法 m1,m2,m3,m4,具体实现就可以根据的业务需求,以及符合抽象模板里面mRun方法执行顺序,进行顺序执行;

这些抽象方法都有一个默认的执行顺序模板,必须按照这个模板才能正常执行;

例如:

一个生产纸箱的工厂,纸箱的生产步骤都是固定流水线

  1. 不同木材执行纤维浆
  2. 纤维平铺
  3. 上色
  4. 烘干

这些步骤是固定的,但如果需要不同木材,不同花纹,不同颜色;这就需要不同的具体流水线了,映射的java类里面就是 , A1 类里面,红木,云纹,复古色 ;A2 杨树,无花纹,白色

代码实现:

一个固定的游戏Game运行模板

  1. public abstract class Game {
  2. abstract void initialize();
  3. abstract void startPlay();
  4. abstract void endPlay();
  5. //模板
  6. public final void play(){
  7. //初始化游戏
  8. initialize();
  9. //开始游戏
  10. startPlay();
  11. //结束游戏
  12. endPlay();
  13. }
  14. }

游戏一Cricket 按照模板进行实现

  1. public class Cricket extends Game {
  2. @Override
  3. void endPlay() {
  4. System.out.println("Cricket Game Finished!");
  5. }
  6. @Override
  7. void initialize() {
  8. System.out.println("Cricket Game Initialized! Start playing.");
  9. }
  10. @Override
  11. void startPlay() {
  12. System.out.println("Cricket Game Started. Enjoy the game!");
  13. }
  14. }

游戏二Football 按照模板进行实现

  1. public class Football extends Game {
  2. @Override
  3. void endPlay() {
  4. System.out.println("Football Game Finished!");
  5. }
  6. @Override
  7. void initialize() {
  8. System.out.println("Football Game Initialized! Start playing.");
  9. }
  10. @Override
  11. void startPlay() {
  12. System.out.println("Football Game Started. Enjoy the game!");
  13. }
  14. }

测试游戏启动

  1. public class TemplatePatternDemo {
  2. public static void main(String[] args) {
  3. Game game = new Cricket();
  4. game.play();
  5. System.out.println();
  6. game = new Football();
  7. game.play();
  8. }
  9. }

输出结果

  1. Cricket Game Initialized! Start playing.
  2. Cricket Game Started. Enjoy the game!
  3. Cricket Game Finished!
  4. Football Game Initialized! Start playing.
  5. Football Game Started. Enjoy the game!
  6. Football Game Finished!