Template Methodパターン vs Strategyパターン

2020/12/06 07:30

GoFのStrategyパターンとTemplate Methodパターンを比較します。それぞれ利点欠点はありますが、その特徴には継承とコンポジションの違いがあらわれています。

Template Methodパターンと、Strategyパターンはどちらも「基本構造の決まっているものを、何らかの方法で一部を拡張する」というシーンでよく用いられます。どちらのパターンを適用すべきか悩むシーンもあるのではないでしょうか。

この2つのパターンの使い分けは「設計上のある課題を継承で対応するか、コンポジションで対応するか」という文脈に大変近い事なので、継承とコンポジションの対比 を理解すると様々なシーンで応用がきくと思います。

上記の内容を受けると、Template MethodパターンはIs-a関係が成立しており拡張の柔軟性を限定して良いような「比較的単純なケース」では扱いやすいけれども、複雑化するような場合にはStrategyパターンを検討していく方が良いと考えられるでしょう。また、迷うような場合には「Stategyパターンにしておく方がより柔軟でもあり、堅牢になりやすそうだ」と考えると指針としては良いはずです。

別の考え方として、必要になればリファクタリングしていくようなイメージもありそうですね。Template MethodのコードをStrategyに書き直すのはそれほど苦労しないと思いますので(逆は困難であったり、場合によってはかなり煩雑になる可能性があります)、初期にコストをかけられない場合にはそのイメージを持って選択するのも一つの考え方ではあると思います。

この記事を書いた人

佐藤 正志

サークルアラウンド株式会社 代表取締役

関連記事