为何要用设计模式?
一、设计模式是前人根据经验总结出来的,使用设计模式,就至关因而站在了前人的肩膀上。javascript
二、设计模式使程序易读。熟悉设计模式的人应该可以很容易读懂运用设计模式编写的程序。java
三、设计模式能使编写的程序具备良好的可扩展性,知足系统设计的开闭原则。好比策略模式,就是将不一样的算法封装在子类中,在须要添加新的算法时,只需添加新的子类,实现规定的接口,便可在不改变现有系统源码的状况下加入新的系统行为。web
四、设计模式能下降系统中类与类之间的耦合度。好比工厂模式,使依赖类只需知道被依赖类所实现的接口或继承的抽象类,使依赖类与被依赖类之间的耦合度下降。算法
五、设计模式能提升代码的重用度。好比适配器模式,就能将系统中已经存在的符合新需求的功能代码兼容新的需求提出的接口 。设计模式
六、设计模式能为常见的一些问题提供现成的解决方案。ide
七、设计模式增长了重用代码的方式。好比装饰器模式,在不使用继承的前提下重用系统中已存在的代码。post
目前总结的设计模式有23种使用普遍 ,咱们先谈简单工厂模式,光讲定义很难明白的用法 ,咱们引用一个案例 ,然你们更好的明白简单设计模式。this
案例:假如写一个计算器,你可能很快的写出以下代码:spa
1 public class Operation 2 { 3 public static double GetResult(double NumberA,double NumberB,string operate) 4 5 { 6 7 double result=0; 8 9 switch(operate){ 10 11 case ''+": 12 13 result=NumberA+NumberB; 14 15 break; 16 17 ....... //减法、 乘法、除法省略 18 19 } 20 21 return result; 22 23 } 24 25 }
界面实现代码 省略;设计
写完这个运算类 咱们能够复用此方法 ,能够在web版,手机等 写计算器,可是若是我但愿计算器在加一个求平方根的功能,咱们只须要在switch里加个语句,彷佛很简单,可是你加个语句 却要让加减乘除一块儿编译一遍 ,因此咱们须要对上面进行修改,将每一个方法分离,因而咱们来用简单工厂模式(SimpleFactory)。
运算类:
1 namespace SimpleFactory 2 { 3 public class Operation 4 { 5 public double NumberA{get;set;} 6 public double NumberB{get;set;} 7 8 public virtual double GetResult() { 9 double result = 0; 10 return result; 11 } 12 } 13 class OperationAdd:Operation 14 { 15 public override double GetResult() 16 { 17 double result = 0; 18 result= NumberA + NumberB; 19 return result; 20 } 21 } 22 class OperationSub:Operation 23 { 24 public override double GetResult() 25 { 26 double result = 0; 27 result = NumberA - NumberB; 28 return result; 29 } 30 } 31 class OperationMulti:Operation 32 { 33 public override double GetResult() 34 { 35 double result = 0; 36 result = NumberA * NumberB; 37 return result; 38 } 39 } 40 class OperationDiv:Operation 41 { 42 public override double GetResult() 43 { 44 if (NumberB==0) 45 { 46 throw new Exception("除数不能为0!"); 47 } 48 else 49 { 50 double result = 0; 51 result = NumberA / NumberB; 52 return result; 53 } 54 } 55 } 56 }
工厂类:
1 namespace SimpleFactory 2 { 3 public class OperationFactory 4 { 5 public static Operation CreateOperate(string operate) { 6 Operation oper = null; 7 switch (operate) 8 { 9 case "+": 10 oper = new OperationAdd(); 11 break; 12 case "-": 13 oper = new OperationSub(); 14 break; 15 case "*": 16 oper = new OperationMulti(); 17 break; 18 case "/": 19 oper = new OperationDiv(); 20 break; 21 default: 22 break; 23 } 24 return oper; 25 } 26 } 27 }
如今,咱们只须要输入运算符,实例出相应的类就能实现计算器的结果:
Operation oper = new Operation(); oper = OperationFactory.CreateOperate("+"); oper.NumberA = 1; oper.NumberB = 2; double result=oper.GetResult();
若是咱们须要加入什么新运算,只须要添加子类就能够了,加分支和改界面都和运算类不要紧了!
简单工厂模式的类图: