利用面向對象寫一個計算器
阿新 • • 發佈:2017-09-01
一個 cnblogs oid class blog 乘除 code 面向對象 over
本文參考了程傑的《大話設計模式》,使用C#語言利用面向對象的模式來寫一個計算器。
如果是我本人來寫計算器,也就加減乘除的話,估計我會全部寫進控制臺裏面,寫4個if語句出來......或者我會利用switch,但是這樣的效果都不好,有更好的方法,就是如下所示的代碼啦:
先定義一個Operation類,主要實現運算框架:
class Operation { public double Number1 { get; set;} public double Number2 { get; set; } public virtualdouble 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 doubleGetResult() { 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類裏面添加分支就好了。不會影響其他的邏輯運算代碼,後臺與前臺代碼也是分開的
利用面向對象寫一個計算器