C#でデザインパターン「Strategyパターン」

C# コンピュータ
C#

Strategyパターンは処理のアルゴリズムをカプセル化し、実行時に切り替えることを目的としたパターンです。

ウィキペディアの「Strategyパターン」のページ
Strategy パターン - Wikipedia

サンプルコード

/// <summary>
/// Strategyパターンのサンプルコード
/// </summary>
interface IMultiplyStrategy
{
    int Multiply(int a, int b);
}

class NormalMutiply : IMultiplyStrategy
{
    public int Multiply(int a, int b) => (a * b);
}
class LoopMutiply : IMultiplyStrategy
{
    public int Multiply(int a, int b)
    {
        int result = 0;

        for(int i=0; i < b; i++)
        {
            result = result + a;
        }

        return result;
    }
}

class MultiplyContext
{
    IMultiplyStrategy _multiplyStrategy;
    public MultiplyContext(IMultiplyStrategy multiplyStrategy)
    {
        _multiplyStrategy = multiplyStrategy;
    }
    public IMultiplyStrategy MultiplyStrategy
    {
        set
        {
            _multiplyStrategy = value;
        }
    }
    public int Multiply(int a, int b)
    {
        return _multiplyStrategy.Multiply(a, b);
    }
}

static class Program
{
    static void Main()
    {

        IMultiplyStrategy normal = new NormalMutiply();
        IMultiplyStrategy loop = new LoopMutiply();

        var context = new MultiplyContext(normal);
        Console.WriteLine($"normal: {context.Multiply(5, 2)}");
        // normal: 10

        context.MultiplyStrategy = loop;
        Console.WriteLine($"loop: {context.Multiply(5, 3)}");
        // loop: 15
    }
}

コメント