本文参考了程杰的《大话设计模式》,使用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类里面添加分支就好了。不会影响其他的逻辑运算代码,后台与前台代码也是分开的
时间: 2024-10-16 23:06:06