using System;
namespace Ahoo.Demo.DesignPatterns.Patterns.FactoryMethod
{
#region 操作类
public abstract class Operation
{
public double FirstNumber { get; set; }
public double SecondNumber { get; set; }
public abstract double GetResult();
}
public class AddOperation : Operation
{
public override double GetResult()
{
double result = FirstNumber + SecondNumber;
return result;
}
}
public class SubOperation : Operation
{
public override double GetResult()
{
double result = FirstNumber - SecondNumber;
return result;
}
}
public class MulOperation : Operation
{
public override double GetResult()
{
double result = FirstNumber * SecondNumber;
return result;
}
}
public class DivOperation : Operation
{
public override double GetResult()
{
if (SecondNumber == 0)
{
throw new ArgumentException("参数[SecondNumber]不能为0!");
}
double result = FirstNumber / SecondNumber;
return result;
}
}
#endregion
interface IFactory
{
Operation CreateOperation();
}
public class AddFactory : IFactory
{
public Operation CreateOperation()
{
return new AddOperation();
}
}
public class SubFactory : IFactory
{
public Operation CreateOperation()
{
return new SubOperation();
}
}
public class AddFactory : IFactory
{
public Operation CreateOperation()
{
return new AddOperation();
}
}
public class MulFactory : IFactory
{
public Operation CreateOperation()
{
return new MulOperation();
}
}
public class DivFactory : IFactory
{
public Operation CreateOperation()
{
return new DivOperation();
}
}
public class Client
{
public static void Excute()
{
IFactory factory = new AddFactory();
Operation operation = factory.CreateOperation();
Console.WriteLine("请输入操作符 第一个操作数");
operation.FirstNumber = Double.Parse(Console.ReadLine());
Console.WriteLine("请输入操作符 第二个操作数");
operation.SecondNumber = Double.Parse(Console.ReadLine());
Console.WriteLine("结果为:{0}", operation.GetResult());
}
}
}