笔记来源于《戏说面向对象设计》。
在群里下载的资料,看过几次关于设计模式的资料,第一次理解得比较深刻得。好好学习~
简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。
先来看看它的组成:
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 }
客户端实现代码:
1 Operation oper; 2 oper = OperationFactory.createOperate("+"); 3 oper.NumberA = 1; 4 oper.NumberB = 2; 5 double result = oper.GetResult();
另外,原文中的“编程是一门技术,更加是一门艺术”说得不错!