アレがアレでアレ

(できれば)プログラミング関係のことを書きたい

Strategy パターン

Template Methodのお次はStrategyパターン

Strategyって

英語で戦略という意味。戦略 = アルゴリズム
アルゴリズムをクラスに実装することで、アルゴリズムを使用するときに切り替えられるようになるデザインパターン

アルゴリズムの実行にインターフェースを使うので、利用する側は実装を意識することなく利用できる。
また、別のアルゴリズムも追加したくなった場合、新しいクラスに実装するだけなので、メンテナンスしやすいコードになる。

住所データを出力するとき、出力するファイル形式をCSVJSONに切り替えられるようなプログラム。

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();
    }
}