メインコンテンツまでスキップ

まとめ

パターン比較レビュー

パターン適用条件強み注意点よく使うシーン
Template Method共通処理の流れを固定したい型が決まり、差分が明確になる継承ベースなので柔軟性が低い保存処理、バッチ処理など
Strategy処理の中身を切り替えたい柔軟性が高く、テストも容易実装クラスが増えやすい通知処理、課金処理など
Decorator追加処理を重ねたい組み合わせ可能で再利用性高いラップが多すぎると読みづらいログ、バリデーションなど
Visitor複数の処理が必要構造に手を加えず処理追加可能拡張対象が多いと煩雑出力形式、構文ツリー処理
Prototype似たような処理・構造を複製したい再利用・差分変更が容易clone() 実装に注意設定、通知テンプレート、UI パーツ

まとめと選び方の指針

  • 似た処理が繰り返されている → まず Template Method を検討
  • 流れが共通で一部だけ異なる → Template Method
  • 処理の切り替えが主眼 → Strategy
  • 処理を「追加する形で重ねたい」 → Decorator
  • 処理とデータ構造を明確に分けたい → Visitor
  • オブジェクトそのものを複製して差分を持たせたい → Prototype

実際の設計会話での使い分けヒント

  • この処理、前のやつとほぼ同じなので Template Method で差分だけ切り出しましょう
  • 処理の中身だけ切り替えたいなら Strategy にすると柔軟ですね
  • ログ処理だけ重ねたいなら Decorator でラップしましょう
  • いろんな出力形式に対応するなら Visitor で処理を分離した方が拡張しやすいですよ」
  • 同じようなオブジェクトをちょっとずつ変えて使ってるなら Prototype で clone するのが楽です