設計模式 - 模板模式



在模板模式中,抽象類公開定義好的方法/模板來執行其方法。其子類可以根據需要覆蓋方法實現,但呼叫方式必須與抽象類定義的方式相同。此模式屬於行為模式類別。

實現

我們將建立一個Game抽象類,定義具有模板方法的操作,並將模板方法設定為final,以便無法覆蓋。CricketFootball是擴充套件Game並覆蓋其方法的具體類。

TemplatePatternDemo,我們的演示類,將使用Game來演示模板模式的使用。

Template Pattern UML Diagram

步驟1

建立一個具有最終模板方法的抽象類。

Game.java

public abstract class Game {
   abstract void initialize();
   abstract void startPlay();
   abstract void endPlay();

   //template method
   public final void play(){

      //initialize the game
      initialize();

      //start game
      startPlay();

      //end game
      endPlay();
   }
}

步驟2

建立擴充套件上述類的具體類。

Cricket.java

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!");
   }
}

Football.java

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!");
   }
}

步驟3

使用Game的模板方法play()來演示定義好的遊戲玩法。

TemplatePatternDemo.java

public class TemplatePatternDemo {
   public static void main(String[] args) {

      Game game = new Cricket();
      game.play();
      System.out.println();
      game = new Football();
      game.play();		
   }
}

步驟4

驗證輸出。

Cricket Game Initialized! Start playing.
Cricket Game Started. Enjoy the game!
Cricket Game Finished!

Football Game Initialized! Start playing.
Football Game Started. Enjoy the game!
Football Game Finished!
廣告