using System;
namespace Ahoo.Demo.DesignPatterns.Patterns.FactoryMethod
{
/*######工厂方法模式#######
* 定义一个用于创建对象的接口,
* 让子类觉得实例化哪个类。
* 使类的实例化延迟到子类
*/
#region 操作类
/// <summary>
/// 抽象类
/// </summary>
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;
}
}
/// <summary>
/// 具体操作子类(-)
/// </summary>
public class SubOperation : Operation
{
public override double GetResult()
{
double result = FirstNumber - SecondNumber;
return result;
}
}
/// <summary>
/// 具体操作子类(*)
/// </summary>
public class MulOperation : Operation
{
public override double GetResult()
{
double result = FirstNumber * SecondNumber;
return result;
}
}
/// <summary>
/// 具体操作子类(/)
/// </summary>
public class DivOperation : Operation
{
public override double GetResult()
{
if (SecondNumber == 0)
{
throw new ArgumentException("参数[SecondNumber]不能为0!");
}
double result = FirstNumber / SecondNumber;
return result;
}
}
#endregion
/// <summary>
/// 工厂接口
/// </summary>
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());
}
}
}
设计模式实例-工厂方法模式
最新推荐文章于 2024-08-16 11:41:01 发布