【テンプレートメソッドパターン】

Template Methodパターン とは?

最終更新:
💡 親が「順番」を決め、子が「中身」を埋める料理レシピ方式

アルゴリズムの骨格を親クラスに定義し、具体的な処理の詳細をサブクラスに任せるデザインパターン。処理の流れを固定しつつ、一部をカスタマイズできる。

📌 このページのポイント
親で共通の流れ、子で一部を実装 親:レポート出力 ① データ取得 ② 整形 ③ 出力 共通 子が実装 共通 子が親を継承 CSVレポート TSVレポート a,b a[TAB]b 整形だけ変更 整形だけ変更
親の取得→整形→出力は処理順序。下の白抜き矢印は子から親への継承関係。
ひよこ ひよこ
Template Methodパターンはどんな仕組み?
ペンギン先生 ペンギン先生
親クラスが処理の骨格を定義し、その途中で呼ぶ一部のメソッドを子クラスが実装するパターンだよ。処理の共通部分を再利用しながら、特定の手順の内容を変えられるんだ。
ひよこ ひよこ
具体的な例を教えて!
ペンギン先生 ペンギン先生
レポートの「データ取得→整形→出力」という共通の流れを親クラスに置く。整形だけを子クラスで変えれば、同じ流れでCSVやTSVのレポートを作れるよ。図の矢印は、子クラスが共通の親クラスを継承する関係を示しているんだ。
ひよこ ひよこ
親に書けば順番は絶対に変えられない?
ペンギン先生 ペンギン先生
共通の順序を親に集約するのが意図だよ。ただしテンプレートメソッド自体を上書きできる言語や設計もある。順序を保つ必要があるなら、どこを上書き可能にするかを明確にすることが大切なんだ。
ひよこ ひよこ
フックメソッドって何?
ペンギン先生 ペンギン先生
任意のカスタマイズ箇所として呼ぶメソッドだよ。既定の処理や何もしない実装を用意しておき、必要な子クラスだけが上書きする。必ず実装する抽象メソッドとは役割を区別すると分かりやすいね。
ひよこ ひよこ
Strategyとはどう違うの?
ペンギン先生 ペンギン先生
Template Methodは継承を使って手順の一部を変え、Strategyは処理を別のオブジェクトへ委譲して差し替える。親の変更が子の振る舞いへ影響することもあるので、共通の流れと変更箇所が安定しているかを考えよう。実行時の差し替えが必要なら委譲を使う設計も候補だね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Template Methodパターン」って出てきたら「流れは親クラスが固定し、中身をサブクラスが決めるパターン」と思えればだいたいOK!
📖 おまけ:英語の意味
「Template Method Pattern」 = テンプレートメソッドパターン
💬 「Template(雛形)」という言葉通り、処理の雛形を親クラスが提供し、子クラスが穴を埋めるというGoFデザインパターンのひとつだよ

参考資料

← 用語集にもどる