zoukankan      html  css  js  c++  java
  • 设计模式--简单工厂模式之计算器

    主要利用工厂模式来实现了一个计算器,将加减乘除操作分离了开来,实现了低耦合的目标。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace 设计模式___计算器
    {
        public class Operation
        {
            double numA;
            public double NumA
            {
                get
                {
                    return numA;
                }
                set
                {
                    numA = value;
                }
            }
            double numB;
            public double NumB
            {
                get
                {
                    return numB;
                }
                set
                {
                    numB = value;
                }
            }
            public virtual string GetResult()//将这个方法写成虚拟的,方便下面的加减乘除按照各自的需要在对方法进行重写即可。
            {
                return "error";
            }
        }
        class OperationAdd : Operation
        {
            public override string GetResult()//重写GetResult()方法,实现两数想加的功能。
            {
                return (NumA + NumB).ToString();
            }
        }
        class OperationSub : Operation
        {
            public override string GetResult()//重写了GetResult()方法,实现了两数相减的功能。
            {
                return (NumA - NumB).ToString();
            }
        }
        class OperationChen : Operation
        {
            public override string GetResult()//重写GetResult()方法,实现了两数相乘的目标。
            {
                double result = NumA * NumB;
                return result.ToString();
            }
        }
        class OperationChu : Operation
        {
            public override string GetResult()//重写GetResult()方法,实现两数相除的目标。
            {
                double result;
                if (NumB == 0)//注意判定被除数是否为零的问题。
                {
                    return "除数不能为空!";
                }
                else
                {
                    result = NumA / NumB;
                    return result.ToString();
                }
            }
        }
        public class OperationFactory
        {
            public static Operation GetOperation(string str)//写了一个静态方法,实现了根据不同的运算符来构造不同的运算对象。
            {
                Operation p = new Operation();//由于Operation为基类,所以它可以接受其他的子类。
                switch (str)
                {
                    case "+": p = new OperationAdd(); break;
                    case "-": p = new OperationSub(); break;
                    case "*": p = new OperationChen(); break;
                    case "/": p = new OperationChu(); break;
                }
                return p;
            }
        }
    
        class Program
        {
    
            static void Main(string[] args)
            {
                int numA, numB;
                string C;
                string result = null;
                Console.WriteLine("请输入第一个数:
    ");
                numA = int.Parse(Console.ReadLine());
                Console.WriteLine("请输入操作符:
    ");
                C = Console.ReadLine();
                Console.WriteLine("请输入第二个数:
    ");
                numB = int.Parse(Console.ReadLine());
                Operation p = OperationFactory.GetOperation(C);
                p.NumA = numA;
                p.NumB = numB;
                Console.WriteLine("结果为:
    ");
                Console.WriteLine(p.GetResult());
                Console.ReadLine();
            }
        }
    }
  • 相关阅读:
    人事面试测试篇25
    人事面试测试篇19
    人事面试测试篇24
    人事面试测试篇20
    人事面试测试篇18
    人事面试测试篇23
    人事面试测试篇21
    人事面试测试篇17
    明天……
    重装系统
  • 原文地址:https://www.cnblogs.com/JsonZhangAA/p/5462105.html
Copyright © 2011-2022 走看看