概要
wikipediaには以下のように表記されていました。
Strategy パターン(ストラテジー -)は、コンピュータープログラミングの領域において、アルゴリズムを実行時に選択することができるデザインパターンである。
Strategy パターンは、アプリケーションで使用されるアルゴリズムを動的に切り替える必要がある際に有用である。Strategy パターンはアルゴリズムのセットを定義する方法を提供し、これらを交換可能にすることを目的としている。Strategy パターンにより、アルゴリズムを使用者から独立したまま様々に変化させることができるようになる。
登場人物
名前 | 意味 |
---|---|
Strategy | 戦略を利用するためのインターフェイス |
ConcreteStrategy | Strategyのインターフェイスを実装した役 |
Client | Strategyを利用する役。Strategyのインスタンスを保持 |
このクラス図ではStrategy
は抽象クラスとして定義されていますが、インターフェイスでもOKです。
実装例
public interface IStrategy { void Execute(); } public class ConcreteStrategyA : IStrategy { public void Execute() { Console.WriteLine("ConcreteStrategyA"); } } public class ConcreteStrategyB : IStrategy { public void Execute() { Console.WriteLine("ConcreteStrategyB"); } } public class Client { private IStrategy _strategy; public Client(IStrategy strategy) { _strategy = strategy; } public void Execute() { _strategy.Execute(); } }
さいごに
仕組み自体はただ委譲(確か正式名称は転送?)してるだけなので簡単ですが、結構有用なデザインパターンだと思います。
ゲームでも、色々な種類の敵の思考ルーチンをStrategyパターンで実装するなんかも良いでしょう。
Client
が保持するStrategy
のインスタンスの変更もランタイムでできますしね。
是非うまく活用してみてください。
ではまた。