Java設計模式四:深入理解模板模式(Template Pattern)

前言

在模板模式(Template Pattern)中,一個抽象類公開定義了執行它的方法的模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行。這種類型的設計模式屬於行爲型模式。

模板設計模式在書中定義:

  定義一個操作中算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變算法的結構即可重定義該算法的某些特定步驟。

  通俗點的理解就是 :完成一件事情,有固定的數個步驟,但是每個步驟根據對象的不同,而實現細節不同;就可以在父類中定義一個完成該事情的總方法,按照完成事件需要的步驟去調用其每個步驟的實現方法。每個步驟的具體實現,由子類完成。

使用場景:

1、在多個子類中擁有相同的方法,而且邏輯相同時,可以將這些方法抽出來放到一個模板抽象類中。

2、程序主框架相同,細節不同的情況下,也可以使用模板方法。

代碼實現

我們將創建一個定義操作的 Game 抽象類,其中在該類中定義模板方法並設置爲 final,這樣它就不會被重寫。模板方法定義遊戲通用基本骨架:開始遊戲和結束遊戲 。basketball和 Football 是擴展了 Game 的實體類,它們重寫了抽象類的方法。

設計類:抽象類、實現子類

1、創建一個抽象類,它的模板方法被設置爲 final。

public abstract class GameTemplate {

   abstract void startPlay();
   abstract void endPlay();
 
   //模板方法
   public final void play(){
 
      //開始遊戲
      startPlay();
 
      //結束遊戲
      endPlay();
   }
}

2、創建擴展了上述類的實體類。

public class Basketball extends GameTemplate {
 
   @Override
   void endPlay() {
      System.out.println("Basketball Game Finished!");
   }
 
   @Override
   void startPlay() {
      System.out.println("Basketball Game Started. Enjoy the game!");
   }
}
public class Football extends Game {
 
   @Override
   void endPlay() {
      System.out.println("Football Game Finished!");
   }
 
   @Override
   void startPlay() {
      System.out.println("Football Game Started. Enjoy the game!");
   }
}

演示

public class TemplatePatternDemo {
   public static void main(String[] args) {
 
      Game game = new Basketball();
      game.play();
      System.out.println();
      game = new Football();
      game.play();      
   }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章