简单工厂模式(Simple Factory)

 

类图:

 

namespace SimpleFactoryPattern
{
    /// <summary>
    /// 简单工厂模式 by ldb
    /// </summary>
    public class Operation
    {
        private double _NumA = 0;
        private double _NumB = 0;

        public double NumA
        {
            get {return _NumA; }
            set { _NumA = value; }
        }
        public double NumB
        {
            get { return _NumB; }
            set { _NumB = value; }
        }

        public virtual double GetResult()
        {
            double result = 0;
            return result;
        }
    }

    class OperationAdd : Operation //加法类
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumA + NumB;
            return result;
        }
    }

    class OperationSub : Operation //减法类
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumA - NumB;
            return result;
        }
    }

    class OperationMul : Operation //加法类
    {
        public override double GetResult()
        {
            double result = 0;
            result = NumA * NumB;
            return result;
        }
    }

    class OperationDiv : Operation //除法类
    {
        public override double GetResult()
        {
            double result = 0;
            if (NumB == 0)
            {
                throw new Exception("除数不能为零!");
            }
            result = NumA / NumB;
            return result;
        }
    }
    /// <summary>
    /// 简单工厂类
    /// </summary>
    public class OperationFactory
    {
        public static Operation CreateOperate(string operate)
        {
            Operation oper = null;

            switch (operate)
            {
                case "+":
                    oper = new OperationAdd();
                    break;

                case "-":
                    oper = new OperationSub();
                    break;

                case "*":
                    oper = new OperationMul();
                    break;

                case "/":
                    oper = new OperationDiv();
                    break;

            }

            return oper;
        } 
    }
    class Program
    {
        static void Main(string[] args)
        {
            Operation oper = OperationFactory.CreateOperate("+");
            oper.NumA = 5;
            oper.NumB = 4;
            double result = oper.GetResult();

            Console.WriteLine("result:" + result);

            Console.ReadKey();
        }
    }
}

 

posted @ 2017-07-23 15:46  longdb  阅读(111)  评论(0)    收藏  举报