zoukankan      html  css  js  c++  java
  • 简单工厂模式 ^

                        首先看一下结构图

    此结构图的代码

    View Code
     /// <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;
            }
    
    
        }
    View Code
     /// <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;
            }
        }
    
        /// <summary>
        /// 乘法类
        /// </summary>
        class OperationMul : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA * NumberB;
                return result;
            }
        }
    
        /// <summary>
        /// 除法类
        /// </summary>
        class OperationDiv : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                if (NumberB == 0)
                    throw new Exception("除数不能为0。");
                result = NumberA / NumberB;
                return result;
            }
        }
    
        /// <summary>
        /// 平方类
        /// </summary>
        class OperationSqr : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberB * NumberB;
                return result;
            }
        }
    
        /// <summary>
        /// 平方根类
        /// </summary>
        class OperationSqrt : Operation
        {
            public override double GetResult()
            {
                double result = 0;
                if (NumberB < 0)
                    throw new Exception("负数不能开平方根。");
                result = Math.Sqrt(NumberB);
                return result;
            }
        }
    
        /// <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;
        }
    }
    View Code
    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);
                }
            }
  • 相关阅读:
    bzoj 1761: [Baltic2009]beetle 区间dp
    NOI冲刺计划
    bzoj 2107: Spoj2832 Find The Determinant III 辗转相除法
    bzoj 2482: [Spoj GSS2] Can you answer these queries II 线段树
    bzoj 1209: [HNOI2004]最佳包裹 三维凸包
    SCOI2015题解 && 考试小结
    bzoj 2806: [Ctsc2012]Cheat 后缀自动机DP
    考场上应该想到。。。。
    spoj LCS 后缀自动机
    BZOJ 1639: [Usaco2007 Mar]Monthly Expense 月度开支
  • 原文地址:https://www.cnblogs.com/babyGee/p/2567029.html
Copyright © 2011-2022 走看看