Strategy パターン
Template Methodのお次はStrategyパターン
Strategyって
英語で戦略という意味。戦略 = アルゴリズム。
アルゴリズムをクラスに実装することで、アルゴリズムを使用するときに切り替えられるようになるデザインパターン。
アルゴリズムの実行にインターフェースを使うので、利用する側は実装を意識することなく利用できる。
また、別のアルゴリズムも追加したくなった場合、新しいクラスに実装するだけなので、メンテナンスしやすいコードになる。
例
住所データを出力するとき、出力するファイル形式をCSVかJSONに切り替えられるようなプログラム。
Strategy
public interface Formatter { void Output(); }
CSVを出力するStrategyの具象クラス
public class CsvFormatter : Formatter { public void Output() { Console.WriteLine("CSVで出力"); } }
JSONを出力するStrategyの具象クラス
public class JsonFormatter : Formatter { public void Output() { Console.WriteLine("JSONで出力"); } }
利用する側(contextクラス)
public class Address { private Formatter formatter; public Address(Formatter formatter) { this.formatter = formatter; } public void Output() { this.formatter.Output(); } }
実行コード
class Program { static void Main(string[] args) { Address address; address = new Address(new CsvFormatter()); address.Output(); address = new Address(new JsonFormatter()); address.Output(); } }