模式介绍

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。

使用场景

1、有多个子类共有的方法,且逻辑相同。
2、重要的、复杂的方法,可以考虑作为模板方法。
3、AbstractList 抽象类中,一些具体的方法中需要子类实现抽象的方法才能好用。

系统实现

/**
 * 游戏抽象类,其中 play 为模板方法
 */
public abstract class Game {
   abstract void initializeGame();
   abstract void startGame();
   abstract void endGame();
   // 钩子方法,子类看情况来决定是否覆盖
   public void otherOperation(){}

   public final void play(){
      initializeGame();
      startGame();
      endGame();
      otherOperation();
   }
}
/**
 * 足球类
 */
public class Football extends Game {

   @Override
   void endGame() {
      System.out.println("Football Game Finished!");
   }

   @Override
   void initializeGame() {
      System.out.println("Football Game Initialized! Start playing.");
   }

   @Override
   void startGame() {
      System.out.println("Football Game Started. Enjoy the game!");
   }
}
/**
 * 板球类
 */
public class Cricket extends Game {

   @Override
   void endGame() {
      System.out.println("Cricket Game Finished!");
   }

   @Override
   void initializeGame() {
      System.out.println("Cricket Game Initialized! Start playing.");
   }

   @Override
   void startGame() {
      System.out.println("Cricket Game Started. Enjoy the game!");
   }

   @Override
   public void otherOperation() {
    System.out.println("see you next time!");
   }
}
/*
 * 客户端
 */
public class Client {
    public static void main(String[] args) {       
        Game game = new Cricket();
        game.play();
        System.out.println("******************************************");
        game = new Football();
        game.play();      
     }
}

结果:
Cricket Game Initialized! Start playing.
Cricket Game Started. Enjoy the game!
Cricket Game Finished!
see you next time!
******************************************
Football Game Initialized! Start playing.
Football Game Started. Enjoy the game!
Football Game Finished!

相关文章:

  • 2021-11-08
  • 2021-07-22
  • 2021-04-30
  • 2021-12-16
  • 2021-12-31
  • 2022-12-23
  • 2021-11-29
猜你喜欢
  • 2022-12-23
  • 2021-10-11
  • 2021-06-23
  • 2021-08-21
  • 2021-06-03
  • 2022-02-23
  • 2022-01-06
相关资源
相似解决方案