在簡單工廠模式中,我們提到簡單工廠模式中,客戶端需要知道兩個(gè)類Operation和OperationFactory,其實(shí)可以運(yùn)用策略模式將其封裝起來:
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();
}
}
現(xiàn)在使用策略模式進(jìn)行改進(jìn),運(yùn)算時(shí)是這樣的:
OperationContext ct = new OperationContext(num1, num2, strOper);
Console.WriteLine(Convert.ToString(ct.GetResult()));
只需要知道OperationContext即可。相比而言,簡單工廠只是返回了Operation這樣的一個(gè)產(chǎn)品,而策略模型則將不同的運(yùn)算看成不同的策略,有相同的輸入輸出格式,只是中間的算法不同而已,將不同的部分交由子類去實(shí)現(xiàn)