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

    一只站在树上的鸟儿,从来不会害怕”树枝”会断裂,因为它相信的不是树枝,而是自己的翅膀。与其每天担心未来,不如努力做好现在。因为,成功的路上,只有奋斗才能给你最大的安全感。

    今天写了一个利用面向对象三大特性(封装,继承,多态)以及设计模式实现的计算器程序,使用面向对象特性使代码易维护,易扩展,使用设计模式可以使程序更加灵活,并且易于复用

    具体实现代码:

    先定义一个运算类

     1    //运算类
     2    public abstract class Operation
     3     {
     4         private double numberA;
     5 
     6         public abstract double GetResult();
     7 
     8         public double NumberA
     9         {
    10             get { return numberA; }
    11             set { numberA = value; }
    12         }
    13         private double numberB;
    14 
    15         public double NumberB
    16         {
    17             get { return numberB; }
    18             set { numberB = value; }
    19         }
    20 
    21         
    22     }

    加减乘除类继承运算类

     1 //加法类
     2    public class OperationAdd:Operation
     3     {
     4        public override double GetResult()
     5        {
     6            double result = 0;
     7            result=this.NumberA + this.NumberB;
     8            return result;
     9        }
    10     }
    11 
    12 
    13 //减法类
    14    public class OperationSub:Operation
    15     {
    16        public override double GetResult()
    17        {
    18            double result = 0;
    19            result = this.NumberA - this.NumberB;
    20            return result;
    21        }
    22     }
    23 
    24 
    25 //乘法类
    26    public class OperationMul:Operation
    27     {
    28        public override double GetResult()
    29        {
    30            double result = 0;
    31            result = this.NumberA * this.NumberB;
    32            return result;
    33        }
    34     }
    35 
    36 
    37 //除法类
    38    public class OperationDiv:Operation
    39     {
    40        public override double GetResult()
    41        {
    42            double result = 0;
    43            //判断用户输入的除数是非为0
    44            if(this.NumberB==0)
    45            {
    46                //抛出异常,提示用户除数不能为0
    47                throw new Exception("除数不能为0!!!");
    48            }
    49            result = this.NumberA /this.NumberB;
    50            return result;
    51        }
    52     }

    工厂类

     1 //简单工厂
     2    public class OperationFactory
     3     {
     4        //传入什么符号就实例化那个方法对象
     5        public static Operation createOperate(string operate) 
     6        {
     7            Operation ot = null;
     8            switch(operate)
     9            {
    10                case "+":
    11                    ot = new OperationAdd();
    12                    break;
    13                case "-":
    14                    ot = new OperationSub();
    15                    break;
    16                case "*":
    17                    ot = new OperationMul();
    18                    break;
    19                case "/":
    20                    ot = new OperationDiv();
    21                    break;
    22                default:
    23                    Console.WriteLine("请输入正确符号:");
    24                    break;
    25            }
    26            return ot;
    27        }
    28     }

    客户端(Main方法)

     1         static void Main(string[] args)
     2         {
     3             Console.WriteLine("请输入第一个数:");
     4             double numA =Convert.ToDouble(Console.ReadLine());
     5             Console.WriteLine("请输入第二个数:");
     6             double numB = Convert.ToDouble(Console.ReadLine());
     7             Console.WriteLine("请输入运算符号:");
     8             string operate = Console.ReadLine();
     9             Operation ot = OperationFactory.createOperate(operate);
    10             ot.NumberA = numA;
    11             ot.NumberB = numB;
    12             Console.WriteLine("结果为:"+ot.GetResult());
    13             Console.ReadLine();
    14         }

    使用Java语言现实是大部分都是一样的

    希望对你有所帮助!!!

     

  • 相关阅读:
    Linq to OBJECT延时标准查询操作符
    LINQ to XML
    动态Linq(结合反射)
    HDU 1242 dFS 找目标最短路
    HDu1241 DFS搜索
    hdu 1224 最长路
    BOJ 2773 第K个与m互质的数
    ZOJ 2562 反素数
    2016 ccpc 杭州赛区的总结
    bfs UESTC 381 Knight and Rook
  • 原文地址:https://www.cnblogs.com/javahenku/p/8603815.html
Copyright © 2011-2022 走看看