Template methodとStrategyはともに「アルゴリズムを変更可能にする」という目的がある.
Template methodとStrategyの違いとして,一般的に下記のようなことが言われている.
しかし実際にはそうではない. Strategyでも継承を使うし,Template methodでも実行時にアルゴリズムを選択する書き方もできる. 要は実装での書き方の違いでしかない.
本質的にはどこが違うのだろう.
クラス図でみる違い
Template Method
Strategy
これを見ると違いがわかる. Strategyの方は,全く異なるアルゴリズムごっそり差し替えるためのパターンだ.
一方でTemplate Methodの方は"template method"の名の通り,アルゴリズムの実行ステップを手順として規定しておいて,各ステップ内の処理をサブクラスに実装させている. Template methodは将来の実装のためのガイドとも言える. なお実行ステップを記述するtemplate methodは当然overrideされないようにしておく.