计算器设计--简单工厂

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aimin_com/article/details/83035342

What’s this?

Factory 工厂实际是对所有的类做了一个检查判断而并非类似于if语句一样每一个都进行判断,而是利用swith case 语句进行选择(参考swith case

工厂类一般用静态方法,通过接收的参数不同来返回不同的对象实例,不修改代码的话是无法扩展的(就是每次增加一个类,就需要在工厂方法里面添加一个case)

Please look at the class diagram

其中:简单工厂OperationFactory和运算类Operation是依赖关系,而Program客户端和简单工厂肯定是关联关系哦!
在这里插入图片描述

How do you do ?

First: 解决Operation类(既设计加减乘除计算)

//运算类
  public 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;
        }
    }

        /// <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;
            }
        }

Second: 设计工厂

/// <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;
            }
        }

Finish:客户端

//可以在控制台窗体使用,使用try-catch是为了检测错误,这里使用只是开始的时候,写完后不建议用try-catch。
 try
            {
                Operation oper;

                Console.Write("请选择运算符号(+、—、*、/:)");
                oper = OperationFactory.createOperate(Console.ReadLine());
                Console.Write("请输入数字A:");
                oper.NumberA = double.Parse(Console.ReadLine());
                Console.Write("请输入数字B:");
                oper.NumberB = double.Parse(Console.ReadLine());

                double result = oper.GetResult();

                Console.WriteLine(result);
                Console.ReadLine();
                

            }
            catch (Exception ex)
            {

                Console.WriteLine("您输入有错:" + ex.Message);
            }

小结:编程是一门技术,更是一门艺术,小菜刚刚开始请不要见怪哦,学习路上永不止步!

猜你喜欢

转载自blog.csdn.net/aimin_com/article/details/83035342