分類

行為型模式。

這個模式在解決什麼

模板方法模式適合處理這種情況:整個流程的大框架其實固定,但其中某幾步需要由不同子類別各自決定。

換句話說,它是在固定骨架的前提下,開放部分步驟給子類別覆寫。

核心做法

父類別會定義一個模板方法,把流程順序排好;其中某些步驟是抽象方法,某些則可能是可選的 Hook。

子類別需要做的不是重寫整個流程,而是只補上那些被保留的變動點。

什麼時候適合用

下面這類流程特別適合:

  • 有一套固定處理順序,但局部步驟會因情境不同而變化
  • 你想避免多個子類別各自複製整份流程
  • 你想強制流程順序一致,只開放少數擴充點

例子

例如某些工具流程一定都是:

  1. 準備資料
  2. 執行核心處理
  3. 整理輸出

但資料來源、排序規則或輸出細節可能不同。這時就可以把總流程寫在父類別,讓子類別只實作其中的差異部分。

排序也是常被拿來說明的例子。排序框架本身固定,但比較規則可以交給外部或子類別決定。

Hook 的作用

Hook 是模板方法裡很實用的一個點。它通常提供預設實作,子類別可以選擇覆寫,也可以不動。

這能讓你在不破壞主流程的前提下,保留少量彈性控制,例如:

  • 某一步是否需要執行
  • 執行前後是否插入額外動作

類圖

這一篇先記住的重點

  • 模板方法模式固定的是流程骨架,不是每一步的細節
  • 子類別負責補上差異點,而不是重寫整個流程
  • Hook 提供了額外但可選的擴充空間

參考書目

《Head First Design Patterns》Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates