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に書き直すのはそれほど苦労しないと思いますので(逆は困難であったり、場合によってはかなり煩雑になる可能性があります)、初期にコストをかけられない場合にはそのイメージを持って選択するのも一つの考え方ではあると思います。