分類
行為型模式。
這個模式在解決什麼
模板方法模式適合處理這種情況:整個流程的大框架其實固定,但其中某幾步需要由不同子類別各自決定。
換句話說,它是在固定骨架的前提下,開放部分步驟給子類別覆寫。
核心做法
父類別會定義一個模板方法,把流程順序排好;其中某些步驟是抽象方法,某些則可能是可選的 Hook。
子類別需要做的不是重寫整個流程,而是只補上那些被保留的變動點。
什麼時候適合用
下面這類流程特別適合:
- 有一套固定處理順序,但局部步驟會因情境不同而變化
- 你想避免多個子類別各自複製整份流程
- 你想強制流程順序一致,只開放少數擴充點
例子
例如某些工具流程一定都是:
- 準備資料
- 執行核心處理
- 整理輸出
但資料來源、排序規則或輸出細節可能不同。這時就可以把總流程寫在父類別,讓子類別只實作其中的差異部分。
排序也是常被拿來說明的例子。排序框架本身固定,但比較規則可以交給外部或子類別決定。
Hook 的作用
Hook 是模板方法裡很實用的一個點。它通常提供預設實作,子類別可以選擇覆寫,也可以不動。
這能讓你在不破壞主流程的前提下,保留少量彈性控制,例如:
- 某一步是否需要執行
- 執行前後是否插入額外動作
類圖

這一篇先記住的重點
- 模板方法模式固定的是流程骨架,不是每一步的細節
- 子類別負責補上差異點,而不是重寫整個流程
- Hook 提供了額外但可選的擴充空間
參考書目
《Head First Design Patterns》Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates