此篇内容参考了:《大话设计模式》(程杰)
为什么要学习设计模式呢?
作为一个刚进入公司的小菜鸟,我遇到的第一个问题就是:公司代码很庞杂,我该怎么入手,该怎么去了解某一段代码到底是在干什么呢?偶尔一天和一个同事聊天,我跟他吐槽了一下公司的代码--看不懂,他跟我说:“其实可以看一下设计模式,有的时候可能不需要仔细的看代码也能知道这个函数再讲什么。”我觉得采用一下这位师兄(鬼知道有没有用,毕竟我也不了解啊。)的建议,毕竟实践出真知麽。
《大话设计模式》:我不敢说这本书是一本好书,因为我才看了两章。不过这书的优点就是通俗易懂,适合像我这种超级小白学习。
罗里吧嗦的话赘述完了,该上正菜了。
这本书开始讲到的一个问题:怎么样去写好代码?
这里有三个点:可维护,可复用,可扩展,灵活性好。
总之:写代码的原则是->拒绝又臭又长的代码。。。
简单工厂模式:
客户端代码:
Operation oper;
oper = OperationFactory.createOperate("+");
oper.NumberA=1;
oper.NumberB=2;
double result = oper.GetResult();
服务端代码:(我不知道是不是服务端,我就先叫他服务端了,毕竟这些代码是服务于客户端)
public class Operation
{
private double _numberA=0;private double _numberB=0;
public double NumberA{
get { return _numberA;}
set{ _numberA = value;}
}
public double NumberB{
get { return _numberB;}
set{ _numberB = value;}
}
public virtual double GerResult()
{
double result=0;
return result;
}
}
public class OperationAdd:Operation
{
public override double GetResult(){
double result = NumberA + NumberB;
return result
}
}
public class OperationFactory
{
public static Operation createOperate(string operate)
{
Operation oper=null;
switch(operate)
{
case "+":
oper = new OpertionAdd();
break;
}
return oper;
}
}
来理解一下这段代码是在干什么?
Operation:提供了获得结果的一种方式GetResult。
OperationAdd:继承了Operation类,并且具体的实现了GetResult类(此处为加法)。
OperationFactory:实现了createOperate函数。
createOperate函数具体实现了:
1,获取客户端传入的不同操作。
2,生成具体的操作对象。
简单工厂模式的优点:
为什么要使用简单工厂模式呢?
(来自小白的解释:因为我觉得一般客户端的代码比较复杂,需要直接面对客户,所以太过复杂的代码容易出现不同的问题,所以将原来放在客户端的代码,放到后台去实现,减少客户端的代码,降低客户端出错的可能。。。)
这里实现的机理:
封装,继承,多态麽。
继承:OperationAdd继承了Operation函数。
多态:客户端生成一个Operation的对象,通过工厂传出子类OperationAdd的对象并赋值给客户端的父类对象,通过父类对象调用GetResult函数(这里实际调用的是OpertionAdd的GETResult函数),从而实现多态。
(欢迎各位大神的不吝赐教。文中代码来自大话设计模式,如果有错,那可能是我手误不是书的问题。)