首页 > 代码库 > 第1章 简单工厂模式

第1章 简单工厂模式

应用层:

using System;using System.Collections.Generic;using System.Text;using OperationLibrary;namespace 计算器控制台{    class Program    {        static void Main(string[] args)        {            try            {                Console.Write("请输入数字A:");                string strNumberA = Console.ReadLine();                Console.Write("请选择运算符号(+、-、*、/):");                string strOperate = Console.ReadLine();                Console.Write("请输入数字B:");                string strNumberB = Console.ReadLine();                string strResult = "";                Operation oper;                oper = OperationFactory.createOperate(strOperate);                oper.NumberA = Convert.ToDouble(strNumberA);                oper.NumberB = Convert.ToDouble(strNumberB);                strResult = oper.GetResult().ToString();                Console.WriteLine("结果是:" + strResult);                Console.ReadLine();            }            catch (Exception ex)            {                Console.WriteLine("您的输入有错:" + ex.Message);            }        }    }}

 

业务逻辑层:

using System;using System.Collections.Generic;using System.Text;namespace OperationLibrary{    /// <summary>    /// 运算类  (作为父类被用来继承 提供共用属性和方法)    /// </summary>    public class Operation    {        private double _numberA = 0;        private double _numberB = 0;        /// <summary>        /// 数字A        /// </summary>        public double NumberA        {            get            {                return _numberA;            }            set            {                _numberA = value;            }        }        /// <summary>        /// 数字B        /// </summary>        public double NumberB        {            get            {                return _numberB;            }            set            {                _numberB = value;            }        }        /// <summary>        /// 得到运算结果        /// </summary>        /// <returns></returns>        public virtual double GetResult()        {            double result = 0;            return result;        }        /// <summary>        /// 检查输入的字符串是否准确        /// </summary>        /// <param name="currentNumber"></param>        /// <param name="inputString"></param>        /// <returns></returns>        public static string checkNumberInput(string currentNumber, string inputString)        {            string result = "";            if (inputString == ".")            {                if (currentNumber.IndexOf(".") < 0)                {                    if (currentNumber.Length == 0)                        result = "0" + inputString;                    else                        result = currentNumber + inputString;                }            }            else if (currentNumber == "0")            {                result = inputString;            }            else            {                result = currentNumber + inputString;            }            return result;        }    }    /// <summary>    /// 加法类 (子类继承父类)    /// </summary>    class OperationAdd : Operation    {        public override double GetResult()        {            double result = 0;            result = NumberA + NumberB;            return result;        }    }    /// <summary>    /// 减法类    /// </summary>
class OperationSub : Operation    {        public override double GetResult()        {            double result = 0;            result = NumberA - NumberB;            return result;        }    }
View Code

 

    /// <summary>    /// 乘法类    /// </summary>
    class OperationMul : Operation    {        public override double GetResult()        {            double result = 0;            result = NumberA * NumberB;            return result;        }    }
View Code

 

    /// <summary>    /// 除法类    /// </summary>
    class OperationDiv : Operation    {        public override double GetResult()        {            double result = 0;            if (NumberB == 0)                throw new Exception("除数不能为0。");            result = NumberA / NumberB;            return result;        }    }
View Code

 

    /// <summary>    /// 平方类    /// </summary>
    class OperationSqr : Operation    {        public override double GetResult()        {            double result = 0;            result = NumberB * NumberB;            return result;        }    }
View Code

 

    /// <summary>    /// 平方根类    /// </summary>
    class OperationSqrt : Operation    {        public override double GetResult()        {            double result = 0;            if (NumberB < 0)                throw new Exception("负数不能开平方根。");            result = Math.Sqrt(NumberB);            return result;        }    }
View Code

 

    /// <summary>    /// 相反数类    /// </summary>
    class OperationReverse : Operation    {        public override double GetResult()        {            double result = 0;            result = -NumberB;            return result;        }    }
View Code

 

    /// <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;                }            case "sqr":                {                    oper = new OperationSqr();                    break;                }            case "sqrt":                {                    oper = new OperationSqrt();                    break;                }            case "+/-":                {                    oper = new OperationReverse();                    break;                }        }        return oper;    }}}