В каждом примере шаблона стратегии создается каждая возможная стратегия в функции Main, например:
Context cn = new Context(new CQuickSorter());
cn.Sort(myList);
cn = new Context(new CMergeSort());
cn.Sort(myList);
Но в некоторых местах нам приходится выбирать, какую стратегию нам следует использовать, где мы должны поместить переключательвыбрать правильную стратегию?В методе?Я видел класс с методом 'switch', который возвращал OBJECT - правильный экземпляр класса стратегии, но тогда это фабрика, а не шаблон стратегии.
Где должен быть «переключатель» в шаблоне стратегии без фабрики?У меня есть это в методе, как показано ниже - это нормально?
enum Operation
{
Addition,
Subtraction
}
public interface IMathOperation
{
double PerformOperation(double A, double B);
}
class AddOperation : IMathOperation
{
public double PerformOperation(double A, double B)
{
return A + B;
}
}
class SubtractOperation : IMathOperation
{
public double PerformOperation(double A, double B)
{
return A - B;
}
}
class CalculateClientContext
{
private IMathOperation _operation;
public CalculateClientContext(IMathOperation operation)
{
_operation = operation;
}
public double Calculate(int value1, int value2)
{
return _operation.PerformOperation(value1, value2);
}
}
class Service
{
//In this method I have switch
public double Calculate(Operation operation, int x, int y)
{
IMathOperation mathOperation = null;
switch (operation)
{
case Operation.Addition:
mathOperation = new AddOperation();
break;
case Operation.Subtraction:
mathOperation = new SubtractOperation();
break;
default:
throw new ArgumentException();
}
CalculateClientContext client = new CalculateClientContext(mathOperation);
return client.Calculate(x, y);
}
}