学习笔记:体会简单工厂模式的美妙之计算器的实现

笔记来源于《戏说面向对象设计》。

在群里下载的资料,看过几次关于设计模式的资料,第一次理解得比较深刻得。好好学习~

简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口
先来看看它的组成:
1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。
2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。

直接贴代码。

  1 /// <summary>
  2     /// 运算类
  3     /// </summary>
  4     public class Operation
  5     {
  6         private double _number1 = 0;
  7         private double _number2 = 0;
  8         /// <summary>
  9         /// 第1个数字
 10         /// </summary>
 11         public double Number1
 12         {
 13             get
 14             {
 15                 return this._number1;
 16             }
 17 
 18             set { this._number1 = value; }
 19         }
 20         /// <summary>
 21         /// 第2个数字
 22         /// </summary>
 23         public double Number2
 24         {
 25             get { return this._number2; }
 26             set { this._number2 = value; }
 27         }
 28         /// <summary>
 29         /// 得到运算结果
 30         /// </summary>
 31         /// <returns></returns>
 32         public virtual double GetResult()
 33         {
 34             double result = 0;
 35             return result;
 36         }
 37     }
 38     /// <summary>
 39     /// 加法类
 40     /// </summary>
 41     class OperationAdd : Operation
 42     {
 43         public override double GetResult()
 44         {
 45             double result = 0;
 46             result = Number1 + Number2;
 47             return result;
 48         }
 49     }
 50     /// <summary>
 51     /// 减法类
 52     /// </summary>
 53     class OperationSub : Operation
 54     {
 55         public override double GetResult()
 56         {
 57             double result = 0;
 58             result = Number1 - Number2;
 59             return result;
 60             //return base.GetResult();
 61         }
 62     }
 63     /// <summary>
 64     /// 乖法类
 65     /// </summary>
 66     class OperationMul : Operation
 67     {
 68         public override double GetResult()
 69         {
 70             double result = 0;
 71             result = Number1 * Number2;
 72             return result;
 73             //return base.GetResult();
 74         }
 75     }
 76     /// <summary>
 77     /// 除法类
 78     /// </summary>
 79     class OperationDiv : Operation
 80     {
 81         public override double GetResult()
 82         {
 83             double result = 0;
 84             if (Number2 == 0)
 85             {
 86                 throw new Exception("除数不能为0");
 87             }
 88             result = Number1 / Number2;
 89             return result;
 90             //return base.GetResult();
 91         }
 92     }
 93     /// <summary>
 94     /// 运算工厂类
 95     /// </summary>
 96     class OperationFactory
 97     {
 98         public static Operation CreateOperation(string operate)
 99         {
100             Operation operation = null;
101             switch (operate)
102             {
103                 case "+":
104                     operation = new OperationAdd();
105                     break;
106                 case "-":
107                     operation = new OperationSub();
108                     break;
109                 case "*":
110                     operation = new OperationMul();
111                     break;
112                 case "/":
113                     operation = new OperationDiv();
114                     break;
115             }
116             return operation;
117         }
118     }
View Code

客户端实现代码:

1 Operation oper;
2 oper = OperationFactory.createOperate("+");
3 oper.NumberA = 1;
4 oper.NumberB = 2;
5 double result = oper.GetResult();
View Code

 另外,原文中的“编程是一门技术,更加是一门艺术”说得不错!

原文地址:https://www.cnblogs.com/-------perfect/p/3473067.html