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

Template Methodパターン とは?

💡 親が「順番」を決め、子が「中身」を埋める料理レシピ方式
📌 このページのポイント
Template Methodパターン AbstractClass(親) templateMethod() ← 骨格を定義 step1() → step2() → step3() step2() は abstract(サブクラスが実装) ConcreteClassA step2() → CSV出力 固有の処理を実装 ConcreteClassB step2() → PDF出力 別の処理を実装 流れ(骨格)は親が固定。中身はサブクラスが決める
Template Methodパターン:親クラスが処理の順番を決め、子クラスが中身を実装する
ひよこ ひよこ

Template Methodパターンって、テンプレートを使う感じなの?

ペンギン先生 ペンギン先生

そうだよ!親クラスに「こういう順番で処理してね」という骨格(テンプレートメソッド)を定義して、詳細はサブクラスに任せるパターンだよ。

ひよこ ひよこ

具体的にどんな場面で使うの?

ペンギン先生 ペンギン先生

例えばレポート出力で「データ取得 → 集計 → フォーマット → 出力」という流れは共通でも、フォーマットCSVPDFかで違う…という場合に使うよ。流れを親クラスで固定して、フォーマット部分だけサブクラスで実装するんだ。

ひよこ ひよこ

Strategyパターンとどう違うの?

ペンギン先生 ペンギン先生

Strategyパターンアルゴリズム全体を別オブジェクトに委譲するんだ。Template Methodは継承ベースで流れを固定するよ。「継承で解決する」か「委譲で解決する」かの違いだね。

ひよこ ひよこ

フックメソッドって何なの?

ペンギン先生 ペンギン先生

テンプレートメソッド内の「差し込みポイント」のことだよ。デフォルトでは何もしないけど、サブクラスがオーバーライドして追加処理を挟めるようにする仕組みなんだ。必須じゃないカスタマイズに使うよ。

ひよこ ひよこ

注意点はある?

ペンギン先生 ペンギン先生

継承を使うから、親クラスが変わるとすべてのサブクラスに影響が出るんだ。また継承階層が深くなると読みにくくなるよ。柔軟性が必要ならStrategyパターンの方が向いていることも多いんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Template Methodパターン」って出てきたら「流れは親クラスが固定し、中身をサブクラスが決めるパターン」と思えればだいたいOK!
📖 おまけ:英語の意味
「Template Method Pattern」 = テンプレートメソッドパターン
💬 「Template(雛形)」という言葉通り、処理の雛形を親クラスが提供し、子クラスが穴を埋めるというGoFデザインパターンのひとつだよ
← 用語集にもどる