标签:工厂方法模式
实例:
实现一个简单地计算器
UML类图:
实现代码:
/// 运算类 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() { double result = 0; return result; } }
/// 加法类 class OperationAdd : Operation { public override double GetResult() { double result = 0; result = NumberA + NumberB; return result; } } /// 减法类 class OperationSub : Operation { public override double GetResult() { double result = 0; result = NumberA - NumberB; return result; } } /// 乘法类 class OperationMul : Operation { public override double GetResult() { double result = 0; result = NumberA * NumberB; return result; } } /// 除法类 class OperationDiv : Operation { public override double GetResult() { double result = 0; if (NumberB == 0) throw new Exception("除数不能为0。"); result = NumberA / NumberB; return result; } }
/// 工厂方法 interface IFactory { Operation CreateOperation(); }
/// 专门负责生产“+”的工厂 class AddFactory : IFactory { public Operation CreateOperation() { return new OperationAdd(); } } /// 专门负责生产“-”的工厂 class SubFactory : IFactory { public Operation CreateOperation() { return new OperationSub(); } } /// 专门负责生产“*”的工厂 class MulFactory : IFactory { public Operation CreateOperation() { return new OperationMul(); } } /// 专门负责生产“/”的工厂 class DivFactory : IFactory { public Operation CreateOperation() { return new OperationDiv(); } }
IFactory operFactory = new AddFactory(); Operation oper = operFactory.CreateOperation(); oper.NumberA = 1; oper.NumberB = 2; double result=oper.GetResult();
说明:
参考资料
-《大话设计模式》
标签:工厂方法模式
原文地址:http://blog.csdn.net/junjun150013652/article/details/45194287