1. 程式人生 > >利用面向對象寫一個計算器

利用面向對象寫一個計算器

一個 cnblogs oid class blog 乘除 code 面向對象 over

  本文參考了程傑的《大話設計模式》,使用C#語言利用面向對象的模式來寫一個計算器。

如果是我本人來寫計算器,也就加減乘除的話,估計我會全部寫進控制臺裏面,寫4個if語句出來......或者我會利用switch,但是這樣的效果都不好,有更好的方法,就是如下所示的代碼啦:

先定義一個Operation類,主要實現運算框架:

    class Operation
    {
        public double Number1 { get; set;}
        public double Number2 { get; set; }

        public virtual
double GetResult() //虛方法 { double result=0; return result; } }

接下來是運算的類啦,這裏我們先寫加減乘除這四種操作吧:

   class OperationAdd:Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = Number1 + Number2;
            
return result; } }
 class OperationSub:Operation
    {
        public override double GetResult()
        {
            double result = 0;
            result = Number1 - Number2;
            return result;
        }
    }
  class OperationMul:Operation
    {
        public override double
GetResult() { double result = 0; result = Number1 * Number2; return result; } }
 class OperationDiv:Operation
    {
        public override double GetResult()
        {
            double result = 0;
            if (Number2==0)
            {
                throw new Exception("除數不能為0");
            }
            result = Number1 * Number2;
            return result;
        }
    }

然後再控制臺我們要調用這些運算邏輯方法對不,怎麽調用呢?這裏再寫一個簡單工廠模式來選擇:

  class OpertionFactory
    {
        public static Operation createOperation(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;

        }
    }

這個簡單工廠模式就是為了選擇運算邏輯而存在的。

最後,我們在控制臺來實現一下吧:

 class Program
    {
        static void Main(string[] args)
        {
            Operation oper;
            oper = OpertionFactory.createOperation("+");        //我這裏寫死了,就是測試一下
            oper.Number1 = 1;
            oper.Number2 = 0;
            double result = oper.GetResult();
            Console.WriteLine(result);
            Console.ReadLine();
        }
    }

  這樣,一個計算器的代碼就寫完了,相比於4個if語句或者是switch語句,這種方式要好很多,如果要添加新的運算,例如開平方,求余運算等等...我都可以添加一個相應的邏輯運算,然後在簡單工廠模式的OperationFactory類裏面添加分支就好了。不會影響其他的邏輯運算代碼,後臺與前臺代碼也是分開的

利用面向對象寫一個計算器