Operation.cs
namespace SimpleFactory
{
class Operation
{
double a = 0;
double b = 0;
public double A
{
get { return a; }
set { a = value; }
}
public double B
{
get { return b; }
set { b = value; }
}
public virtual double GetResult()
{
return (double)0;
}
}
class Add : Operation
{
public override double GetResult()
{
return A + B;
}
}
class Sub : Operation
{
public override double GetResult()
{
return A - B;
}
}
class Mul : Operation
{
public override double GetResult()
{
return A * B;
}
}
class Div : Operation
{
public override double GetResult()
{
if (B == 0)
throw new Exception("B can't be zero!");
return A / B;
}
}
}
OperationFactory.cs
namespace SimpleFactory
{
class OperationFactory
{
public static Operation CreateOperation(string operate)
{
Operation op = null;
switch (operate)
{
case "+":
op = new Add();
break;
case "-":
op = new Sub();
break;
case "*":
op = new Mul();
break;
case "/":
op = new Div();
break;
}
return op;
}
}
}
Program.cs
namespace SimpleFactory
{
class Program
{
static void Main(string[] args)
{
Operation operation = OperationFactory.CreateOperation("+");
operation.A = 1;
operation.B = 1;
double result = operation.GetResult();
}
}
}
关系图