回顾上一节:
我们利用面向对象方法把计算器的输入和计算做作为一个类来对待,然后利用继承特性让加减乘除来继承该类实现了修改或者添加一个新的运算不影响其他的运算。如何去实例化对象成了我们的问题。
方案:简单工厂模式,也就是说到底要实例化谁,将来会不会增加实例化的对象,比如开根运算,这是很容易变化的地方,应该考虑单独一个类来做这个创造实例化的过程,即工厂.
public class OperationFactory
{
public static Operation createOperate(string operate)
{
Operation oper = null;
switch (operate)
{
case "+":
oper = new OpertionAdd(); //+
break;
case "-":
oper = new OpertionSub();// -
break;
case "*":
oper = new OpertionMul();
break;
case "/":
oper = new OpertionDiv();
break;
}
}
}
客户端代码
Operation oper;
oper = OperationFactory.createFactory("+");
oper.NumberA=1;
oper.NumberB=2;
double result =oper.GetResult();
这样不管你是控制台程序,windows程序,web程序,PDA或手机程序,都可以用这段代码来实现计算器功能。若有一天我们需要更改加法运算,只需要改OperationAdd就可以了。若需要增加平方根等运算,只需要增加相应的运算子类就可以了。来看下他们的结构图:
说明: 黑色实心 表示关联 即 一个类要知道了解更一个类
虚心实线 表示继承关系