在简单工厂模式中,我们提到简单工厂模式中,客户端需要知道两个类Operation
和OperationFactory
,其实可以运用策略模式将其封装起来:
class OperationContext
{
private Operation oper = null;
public OperationContext(double num1_, double num2_, string type)
{
switch (type)
{
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
}
oper.Num1 = num1_;
oper.Num2 = num2_;
}
public double GetResult()
{
return this.oper.GetResult();
}
}
现在使用策略模式进行改进,运算时是这样的:
OperationContext ct = new OperationContext(num1, num2, strOper);
Console.WriteLine(Convert.ToString(ct.GetResult()));
只需要知道OperationContext
即可。相比而言,简单工厂只是返回了Operation
这样的一个产品,而策略模型则将不同的运算看成不同的策略,有相同的输入输出格式,只是中间的算法不同而已,将不同的部分交由子类去实现