/// <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
}
}
コメント