简单工厂设计模式

前言

  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中增加分支

 

  参考书籍:大话设计模式

  

posted @ 2018-10-17 18:09  hyunbar  阅读(191)  评论(0编辑  收藏  举报