首页 > 代码库 > 设计模式之简单工厂模式

设计模式之简单工厂模式

UML图

 

namespace Study2014.CjModelDesign
{
    /// <summary>
    /// 2014-5-19
    /// 简单封装 
    /// 过程式开发?
    /// </summary>
    public class Operation
    {
        public static double GetOldResult(double numberA, double numberB, string operate)
        {
            double result = 0;
            switch (operate)
            { 
                case "+":
                    result = numberA + numberB;
                    break;
                case "-":
                    result = numberA - numberB;
                    break;
                case "*":
                    result = numberA * numberB;
                    break;
                case "/":
                    if (numberB == 0)
                    {
                        throw new Exception("被除数不能为0");
                    }
                    result = numberA / numberB;
                    break;
            }
            return result;
        }

        //另一种写法
        public double NumberA
        {
            get;
            set;
        }

        public double NumberB
        {
            get;
            set;
        }

        public virtual double GetResult()
        {
            return 0;
        }
    }
}
View Code
namespace Study2014.CjModelDesign
{
    /// <summary>
    /// +操作 简单工厂
    /// </summary>
    public class OperationAdd:Operation
    {
        public override double GetResult()
        {
            return this.NumberA + this.NumberB;
        }
    }
}
View Code
namespace Study2014.CjModelDesign
{
    /// <summary>
    /// 除 操作 简单工厂
    /// </summary>
    public class OperationDiv:Operation
    {
        public override double GetResult()
        {
            if (this.NumberB == 0)
            {
                throw new Exception("除数不能为0");
            }
            return this.NumberA / this.NumberB;

        }
    }
}
View Code
 public class OperationFactory
    {
        /// <summary>
        /// 简单工厂模式
        ///
        /// </summary>
        /// <param name="operate"></param>
        /// <returns></returns>
        public static Operation CreateOperation(string operate)
        {
            //多态
            Operation op = null;
            switch (operate)
            { 
                case "+":
                    op = new OperationAdd();
                    break;
                case "-":
                    op = new OperationSub();
                    break;
                case "*":
                    op = new OperationMul();
                    break;
                case "/":
                    op = new OperationDiv(); 
                    break;
            }
            return op;
        }
    }
View Code

总结一下这样写的好处

  1. 松耦合,后续增加其他的业务类(如:平方等),只需增加一个新的子类(从Operation继承),再修改工厂的代码(加个分支).
  2. 其他的没想到...