为什么要用设计模式?
1、设计模式是前人根据经验总结出来的,使用设计模式,就相当于是站在了前人的肩膀上。
2、设计模式使程序易读。熟悉设计模式的人应该能够很容易读懂运用设计模式编写的程序。
3、设计模式能使编写的程序具有良好的可扩展性,满足系统设计的开闭原则。比如策略模式,就是将不同的算法封装在子类中,在需要添加新的算法时,只需添加新的子类,实现规定的接口,即可在不改变现有系统源码的情况下加入新的系统行为。
4、设计模式能降低系统中类与类之间的耦合度。比如工厂模式,使依赖类只需知道被依赖类所实现的接口或继承的抽象类,使依赖类与被依赖类之间的耦合度降低。
5、设计模式能提高代码的重用度。比如适配器模式,就能将系统中已经存在的符合新需求的功能代码兼容新的需求提出的接口 。
6、设计模式能为常见的一些问题提供现成的解决方案。
7、设计模式增加了重用代码的方式。比如装饰器模式,在不使用继承的前提下重用系统中已存在的代码。
目前总结的设计模式有23种使用广泛 ,我们先谈简单工厂模式,光讲定义很难明白的用法 ,我们引用一个案例 ,然大家更好的明白简单设计模式。
案例:模拟写一个计算器,你可能很快的写出如下代码:
namespace ConsoleAllTest
{
public class Operation
{
public double NumberA { get; set; }
public double NumberB { get; set; }
public virtual double GetResult()
{
double result = 0;
return result;
}
}
public class OperationAdd : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
}
public class OperationSub : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA - NumberB;
return result;
}
}
public class OperationMulti : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA * NumberB;
return result;
}
}
public class OperationDiv : Operation
{
public override double GetResult()
{
if (NumberB==0)
{
throw new Exception("除数不能为0!");
}
else
{
double result = 0;
result = NumberA / NumberB;
return result;
}
}
}
工厂类:
public class OperationFactory
{
public static Operation createOperation(string operate)
{
Operation oper = null;
switch (operate)
{
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMulti();
break;
case "/":
oper = new OperationDiv();
break;
default:
break;
}
return oper;
}
}
}
现在,我们只需要输入运算符,实例出相应的类就能实现计算器的结果:
Operation oper = new Operation();
oper = OperationFactory.CreateOperate("+");
oper.NumberA = 1;
oper.NumberB = 2; double result=oper.GetResult();
如果我们需要加入什么新运算,只需要添加子类就可以了,加分支和改界面都和运算类没关系了!
简单工厂模式的类图:
总结:virtual虚函数主要作用是子类可以继续父类,也可以重写(override)父类方法。比如学习一种方法,觉得不合理,就不继承此方法,重写一种新的方法即可。