There is creating each possible strategy in Main function in any strategy pattern example, for example:
Context cn = new Context(new CQuickSorter());
cn.Sort(myList);
cn = new Context(new CMergeSort());
cn.Sort(myList);
But in some place we have to choose what strategy we should use, where we should place 'switch' to choose a correct strategy? In a method? I saw class with method with 'switch' which returned OBJECT - the correct strategy class instance but then that is factory, not strategy pattern.
Where should be 'switch' in strategy pattern without factory? I have that in method like below - is it ok?
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);
}
}
Aucun commentaire:
Enregistrer un commentaire