プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

10.Strategy アルゴリズムをごっそり切り替える

委譲によってアルゴリズムを切り替える
プログラムは問題を解くために書かれている。問題を解くための手法を交換できるようにしたのがStrategyパターン。

f:id:p-monster:20121218195218p:plain

Strategy・・・戦略を利用するためのAPI
ConcreteStrategy・・・Strategyの実装。具体的な戦略
Context・・・Strategyを利用。ConcreteStrategyのインスタンスを持ち、必要な時に利用

実行中に切り替えることも可能

アルゴリズムをそのままプログラムの中に実装してしまうことはよくあるが、意識的に分離してAPIの部分だけを規定することで切り替えを容易にする。
プログラムの文脈のどこがアルゴリズムを指しているか、そしてアルゴリズムを変更するには何を抽象化すればいいか。
デザインパターンは形が似ていても、意図が異なる場合は別のものとして意識する。

関連しているパターン

Flyweight・・・ConcreteStrategyはFlyweightパターンを使って複数箇所から共有できる場合がある
AbstractFactory・・・Strategyパターンはアルゴリズムを切り替える。AbstractFactoryパターンは具体的な工場・部品・製品を切り替える
State・・・StrategyもStateも委譲先を切り替えるパターン。しかし目的は異なる。Strategyが扱うのはアルゴリズムで、Stateは状態を扱う。

参考:

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

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