整理《大话设计模式》,力图代码简单明了,结构一目了然:
工厂方法-计算器
namespace 工厂方法_计算器
{
class Operation // 运算类
{
private double _numberA = 0;
private double _numberB = 0;
public double NumberA { get { return _numberA; } set { _numberA = value; } }
public double NumberB { get { return _numberB; } set { _numberB = value; } }
public virtual double GetResult() { return 0; } // 得到运算结果
}
class OperationAdd : Operation { public override double GetResult() { return NumberA + NumberB; } } // +法类
class OperationSub : Operation { public override double GetResult() { return NumberA - NumberB; } } // -法类
class OperationMul : Operation { public override double GetResult() { return NumberA * NumberB; } } // *法类
class OperationDiv : Operation { public override double GetResult() { if (NumberB == 0) throw new Exception("除数不能为0"); // /法类
return NumberA / NumberB; } }
interface IFactory { Operation CreateOperation(); } // 工厂方法(接口)
class FactoryAdd : IFactory { public Operation CreateOperation() { return new OperationAdd(); } } // 专门负责生产 + 的工厂
class FactorySub : IFactory { public Operation CreateOperation() { return new OperationSub(); } } // -
class FactoryMul : IFactory { public Operation CreateOperation() { return new OperationMul(); } } // *
class FactoryDiv : IFactory { public Operation CreateOperation() { return new OperationDiv(); } } // /
// Main: IFactory operFactory = new FactoryAdd();
// Operation oper = operFactory.CreateOperation();
// oper.NumberA = 1;
// oper.NumberB = 2;
// double result = oper.GetResult();
}
(阿秋哥 20170714)