类介绍:
1.Operation类
2.Operation子类OperationAdd(+)、OperationSub(-)、OperationMul(*)、OperationDiv(/)
3.OperationFactory类
代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Model
{
public class Operation
{
private double _NumA;
private double _NumB;
public double NumA
{
get { return _NumA; }
set { _NumA = value; }
}
public double NumB
{
get { return _NumB; }
set { _NumB = value; }
}
public virtual double GeAns()
{
double result = 0;
return result;
}
}
class OperationAdd : Operation
{
public override double GeAns()
{
return NumA + NumB;
}
}
class OperationSub : Operation
{
public override double GeAns()
{
return NumA - NumB;
}
}
class OperationMul : Operation
{
public override double GeAns()
{
return NumA * NumB;
}
}
class OperationDiv : Operation
{
public override double GeAns()
{
if (NumB != 0)
{
return NumA / NumB;
}
else
{
throw new Exception("除数不能为0!");
}
}
}
public class OperationFactory
{
public static Operation createOperation(string operate)
{
Operation oper = null;
switch (operate)
{
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
}
return oper;
}
}
class Program
{
static void Main(string[] args)
{
Operation oper;
oper = OperationFactory.createOperation("/");
oper.NumA = 1;
oper.NumB = 0;
oper.GeAns();
Console.ReadKey();
}
}
}
从主函数开始讲:程序先定义了一个oper,但是没有对其实例化对象/没有指向实例化对象。简单工厂模式就是将oper指向的对象交由OperationFactory去实例化出来,工厂接收到参数为“/”则返回一个operationDiv对象,然后oper指向该对象并且对A,B赋值,然后GetAns。这种方法的好处就是生成对象交由工厂决定,且增加计算类型时,只需要operation子类就行。