PHP7でデザインパターン入門10/23 Strategyパターン

Strategy パターンとは

Strategy パターンは、コンピュータープログラミングの領域において、アルゴリズムを実行時に選択することができるデザインパターンである。

Strategy パターン - Wikipedia

ようするにアルゴリズムの実装部分をごっそり交換可能にするということのようだ。

example

Strategyパターンを使って、「じゃんけん」プログラムを実装する。

ソースコード

github.com

  • Hand: じゃんけんの「手」を表す
  • Strategy: じゃんけんの「戦略」を表すインターフェース
  • WinningStrategy: 戦略の実装。勝ったら次も同じ手を出す戦略
  • ProbStrategy: 戦略の実装。1回前の手から次の手を確率的に計算する戦略
  • Player: じゃんけんを行うプレイヤーを表す
  • Main: サンプルコードの実行を行う

役割

  • Strategy役: 戦略を利用するインターフェースを定める役。サンプルにおけるStrategyインターフェース
  • ConcreteStrategy: Strategy役のインターフェースを実際に実装する役。サンプルにおけるWinningStrategy, ProbStrategyクラス
  • Context役: Strategyを利用する役。ConcreteStrategy役のインスタンスを持っていて、必要に応じてそれを利用する。サンプルにおけるPlayerクラス

まとめ

  • Strategyパターンでは、アルゴリズムの部分を他の部分と意識的に分離する。アルゴリズムとインターフェースの部分だけを規定する。
  • アルゴリズムを改良したい場合、Strategyパターンを使っていればStrategy役のインターフェースを変更しないように注意しConcreteStrategy役だけを変更すれば良い。
  • 委譲によりアルゴリズムの切り替えが容易

関連パターン

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門