ストラテジーパターンとは?
すとらてじーぱたーん
アルゴリズムをクラスとしてカプセル化し、実行時に差し替えられるようにするGoFデザインパターンのひとつです。
ストラテジーパターン(Strategy Pattern)とは、GoF(Gang of Four)の提唱する23のデザインパターンのひとつで、同じ目的を達成するための複数のアルゴリズム(戦略)をそれぞれクラスとしてカプセル化し、コンテキスト(利用側)が実行時に好きな戦略を選択・切り替えできるようにする設計パターンです。「振る舞いに関するパターン」に分類されます。
基本的な構造は次のとおりです。Strategy(戦略インターフェース)はアルゴリズムの共通インターフェースを定義します。ConcreteStrategy(具体的戦略クラス)はそのインターフェースを実装した各アルゴリズムです。Context(コンテキスト)はStrategyオブジェクトへの参照を保持し、実際の処理を委譲します。
ストラテジーパターンが活躍する場面の例は次のとおりです。
- ソートアルゴリズムの切り替え(クイックソート・マージソートなど)
- 支払い方法の切り替え(クレジットカード・電子マネー・代引きなど)
- データ圧縮方式の切り替え(ZIP・GZIP・LZMAなど)
- バリデーションルールの組み合わせ
if-elseの分岐を減らしてコードの見通しを良くし、新しいアルゴリズムを追加する際も既存コードへの影響を最小限に抑えられます(開放閉鎖原則)。JavaのComparatorやPythonの関数オブジェクトを引数に渡すスタイルもストラテジーパターンの一形態といえます。
使い方・例文
ECサイトで配送料の計算ロジックを「通常便」「速達」「時間指定」ごとにStrategyクラスとして実装しておくと、注文画面で選択された配送方法に応じて計算クラスを差し替えるだけで対応でき、条件分岐なしに拡張できます。
この用語をシェア
最終更新: