前言
1>、我们可以一个类就能写完这个计算器的程序,但是这样:
第一,不利于维护,要改动就要改动整个程序;第二,不可复,只能这个需要使用;第三,不利于扩展
所以,通过封装,继承,多态去降低耦合度。
2>、首先就是业务的封装,将业务逻辑和界面层分离,只有分离,才可以达到容易维护或扩展。
一、操作类
1 public class Operation
2 {
3 public double _numberA = 0;
4 public double _numberB = 0;
5 public double NumberA
6 {
7 get { return _numberA; }
8 set { _numberA = value; }
9 }
10 public double NumberB
11 {
12 get { return _numberB; }
13 set { _numberB = value; }
14 }
15 public virtual double GetResult()
16 {
17 return 0;
18 }
19 }
二、具体操作类
1>、首先有一个运算类,它有两个属性,主要用于计算器的前后数,然后有一个虚方法GetResult(),用于得到结果。
2>、然后把加减乘除的运算写成子类,继承它之后,重写GetResult();这样要修改任何算法就不需要提供其他算了,
要添加算法,只需要添加算法类继承父类。
1 public class OperationAdd : Operation
2 {
3 public override double GetResult()
4 {
5 return NumberA + NumberB;
6 }
7 }
1 public class OperationSub : Operation
2 {
3 public override double GetResult()
4 {
5 return NumberA - NumberB;
6 }
7 }
三、工厂类
1>、用简单工厂 让计算器知道我们希望用哪一个算法
1 public class OperationFactory
2 {
3 public static Operation CreateOperate(string type)
4 {
5 Operation oper = null;
6 switch (type)
7 {
8 case "+":
9 oper = new OperationAdd();
10 break;
11 case "-":
12 oper = new OperationSub();
13 break;
14 default:
15 break;
16 }
17 return oper;
18 }
19 }
四、测试
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 Operation op;
6 op = OperationFactory.CreateOperate("+");
7 op.NumberA = 1;
8 op.NumberB = 2;
9 Console.WriteLine(op.GetResult());
10 Console.WriteLine("__________________");
11 op = OperationFactory.CreateOperate("-");
12 op.NumberA = 5;
13 op.NumberB = 3;
14 Console.WriteLine(op.GetResult());
15 Console.ReadKey();
16 }
17 }
总结
1>、不管是控制台程序,windows程序,web程序或者app,都可以用这段段代码来实现计算器的功能
2>、如果有一天我们需要更改加法运算,我们只需要改OperationAdd
3>、如果我们要添加运算,比如平方根,对数等;只需要增加相应的运算子类
4>、还要再switch中增加分支
参考书籍:大话设计模式