从一个例子理解设计模式

来源:互联网 发布:js setparameter 编辑:程序博客网 时间:2024/04/30 14:18
看了不少设计模式的书,发现讲得都比较抽象。对于项目经验少的人很难理解,但是我觉得设计模式作为一种思想范畴的问题,不必要有这么高的门槛。只要有些生活阅历的人,都应该能够理解。这才能体现出其伟大。我以这个目标作为自己努力的方向,这里先写一点我由这个出发点所做的工作。
在讲模式之前,我先讲一下一个引例。
从前有个贫农,他有一块地。地不大,他自己就能种过来。这样省吃俭用过了几年,他攒了些钱。用这些钱他又买了块地,这时候他自己就有点种不过来了。但是为了能省钱,他还是没有请人,还是坚持着自己把这块地种完了。如此又过了几年,这时候这个贫农地又多了几块。成了中农了,这个时候他自己就干不过来活了,他要请几个长工干活,但是他自己也跟着干活。这个时候他要干两件事情了,不但要完成自己种地的事情,还要管理这些长工,让这些长工不要偷奸耍滑。如此几年,他的地更多了,雇佣的长工也更多了。这时候他发现自己连种地带干活有点忙不过来了。于是,他就尝试着自己不干活,只让雇佣的长工干。而他自己就管着这些长工就行了。这时候他的日子美了,每天喝着小酒没事看着这些长工让他们干活。而自己就等着收钱就行了。
但是,如此几年之后又有问题了。什么问题?因为他的地越来越多,雇佣的长工就越来越多。他发现自己管理这些长工也管不过来了,去了地的东头,地西头的偷懒。去地的西头呢,地东头的偷懒。他起初没什么办法,只能任由这些人偷懒。后来有个人找他,跟他喝了顿酒和他说。你给我点钱,我替你管他们。保证这些长工老老实实的干活,不敢偷懒。他因为酒喝的有点多,就同意了。这样就多了一个人替他管这些长工,开始的时候他有点后悔。心说自己的东西,这个人没干什么活就得钱了,这不是弱智吗。但是,后来他慢慢发现这样一个人存在。他自己省事多了,有什么事不用自己亲自干了。只要把这个人叫来去做就行了,而且到年终的时候一算账收入竟然还略有增长。这样这个新升的地主就把这个制度延续了下去。而随着他的钱越来越多,拥有的地越来越大,雇佣的人也就越来越多。这些人里面管理那些干活的人也就多了起来,慢慢的这些管理的人也分了层次。有总管,管家,仆人。而他自己作为一个大地主,要干什么事情只要和底下的总管说一声,自然就有人替他干了。他再也不用什么事情都亲历亲为了。故事讲到这里就结束了,里面包含了很多的道理。设计模式能够存在的原因就在其中,那究竟是什么原因呢。听我细细说来。
作为一个程序员,起初的时候我们都跟故事中的贫农一样地不多。我们能做的都是写小项目,这些小项目我们写一个类就能够实现。随着项目的扩大,我们在这个类中不断的增加内容。当项目到达一定的程度之后,我们会发现在这一个类写代码有点太累了。如同故事中的贫农他自己一个人干不过来那么多活。这个时候我们就想到要创建几个新的类,也就是雇佣几个长工。这几个新的类来做具体的事情,而只要有一个类来管理这几个具体干活的类就行了。这样我们把整个项目结构分成了两层,一层干活一层管理。把这个架构搭好之后,我们只要向管理的类发个命令,就好了。这样我们可以干点更大的项目了,但这个时候我们会发现一个管理类管理太多的具体干活的类有点力不从心。如同故事中的主人公管不了太多的长工。这个时候,你就要写多点的管理类,原来一个类的活两个类干或者更多的类来干。这样慢慢的,我们整个项目架构中类的层次就越来越多。但是,这却并没有增加我们干活的复杂度。因为有事的时候,我们只要调用最顶层的那个管理类就能够实现很多的功能。这如同现实中的领导说一句话,那会牵扯到很多的人。普通人说修条路,可能一辈子都完不了,而主席说盖栋楼则一夜之间就能盖起高楼大厦。
这样我们,把一个项目中的类分成了两种,一种是具体干活的,一种是管理干活的。而管理的之中又分很多的层次,这个时候就可能会出现混乱。所以就要设计好一些方法,这些方法能够让这个由干活的类和管理的类都各司其职,干好本质工作。使整个项目能够正确快速的运转。于是慢慢的有一些特别好的方法出现了,这些经过淘汰下来的好的方法,我们给它们起了个名字叫模式。于是就出现了设计模式。
理解了上面的这些东西,你就会发现设计模式是个什么东西。它可能是我们在贫农阶段所不了解的,但是随着你项目的不断扩大,你会慢慢意识到它的价值所在。没有这些模式的存在,我们很难一个大型的项目成型,并且正确的运转。
下面说下初学模式可能会遇到的一些问题,首先要知道我们现在如果当个地主,那么很容易就知道要雇人干活,雇人管理这些人。而你只要坐着数数钱就行,但是这时候,我们要知道感谢那个创建了地主制度的人。否则你即使有再多的地,也是没用的。而这个制度的创造者一定是个设计模式方面的高手。所以,要使用到模式的时候很多时候都是要项目规模到了一定程度之后才会体现出它的价值。否则只是一个加减法的运算,那还用什么模式。
第二点,当一个模式创建出来之后,我们在干类似的事情之后会节省很多的力气。就如同我们现在当个地主,那很多管理上的事情我们都不用自己想了,早有人替我们想好了。所以学习模式是有意义的,因为它们是经过筛选后所存在下来的。能够重复的被使用,所以学过之后我们再面对类似的问题的时候就会很快的理解。学一门新的技术,也就不会再显得太难。
就讲到这里,我这里主要说了一些我认为在初学设计模式要知道的东西。而这些东西,在书上一般是没有的。