1.3 设计模式的学习

1.3.1 为什么要学习设计模式

为什么要学习设计模式?实在是有太多的理由了,这里简单地罗列几点。

1.设计模式已经成为软件开发人员的“标准词汇”

很多软件开发人员在相互交流的时候,只是使用设计模式的名称,而不深入说明其具体内容。就如同我们在汉语里面使用成语一样,当你在交流中使用一个成语的时候,是不会去讲述这个成语背后的故事的。

举个例子来说:开发人员A碰到了一个问题,然后与开发人员B讨论,开发人员B可能会支招:使用“×××模式”(×××是某个设计模式的名称)就可以了。如果这个时候开发人员A不懂设计模式,那他们就无法交流。

因此,一个合格的软件开发人员,必须掌握设计模式这个“标准词汇”。

2.学习设计模式是个人技术能力提高的捷径

设计模式是很多前辈经验的积累,大都是一些相对优秀的解决方案,很多问题都是典型的、有代表性的问题。

学习设计模式,可以学习到众多前辈的经验,吸收和领会他们的设计思想,掌握他们解决问题的方法,就相当于站在这些巨人的肩膀上,可以让我们个人的技术能力得到快速的提升。学习设计模式虽然有一定的困难,但绝对是快速提高个人技术能力的捷径。

3.不用重复发明轮子

设计模式是解决某些特定问题的解决方案。当我们再次面对这些问题的时候,就不用自己从头来解决这些问题,复用这些方案即可。

大多数情况下,这或许是比自己从头来解决这些问题更好的方案。一是你未必能找到比设计模式更优秀的解决方案;另外,通过使用设计模式可以节省大量的时间,你可以把节省的时间花在其他更需要解决的问题上。

1.3.2 学习设计模式的层次

学习设计模式大致有以下三个层次。

1.基本入门级

要求能够正确理解和掌握每个设计模式的基本知识,能够识别在什么场景下、出现了什么样的问题、采用何种方案来解决它,并能够在实际的程序设计和开发中套用相应的设计模式。

2.基本掌握级

除了具备基本入门级的要求外,还要求能够结合实际应用的场景,对设计模式进行变形使用。

事实上,在实际开发中,经常会碰到与标准模式的应用场景有一些不一样的情况,此时要合理地使用设计模式,就需要对它们做适当的变形,而不是僵硬地套用了。当然进行变形的前提是要能准确深入地理解和把握设计模式的本质,万变不离其宗,只有把握住本质,才能够确保正确变形使用而不是误用。

3.深入理解和掌握级

除了具备基本掌握级的要求外,更主要的是:

延伸

要从思想上和方法上吸收设计模式的精髓,并融入到自己的思路中,在进行软件的分析和设计的时候,能随意地、自然而然地应用,就如同自己思维的一部分。

在较复杂的应用中,当解决某个问题的时候,很可能不是单一应用某一个设计模式,而是综合应用很多设计模式。例如,结合某个具体的情况,可能需要把模式A进行简化,然后结合模式B的一部分,再组合应用变形的模式C…,如此来解决实际问题。

更复杂的是除了考虑这些设计模式外,还可能需要考虑系统整体的体系结构、实际功能的实现、与已有功能的结合等。这就要求在应用设计模式的时候,不拘泥于设计模式本身,而是从思想和方法的层面进行应用。

简单点说,基本入门级就是套用使用,相当于能够依葫芦画瓢,很机械;基本掌握级就是能变形使用,比基本入门级灵活一些,可以适当变形使用;深入理解和掌握级才算是真正将设计模式的精髓吸收了,是从思想和方法的层面去理解和掌握设计模式,就犹如练习武功到最高境界,“无招胜有招”了。要想达到这个境界,没有足够的开发和设计经验,没有足够深入的思考,是不太可能达到的。

提示

有些朋友说:设计模式的书我看了不少,觉得都看懂了,就是不知道在实际开发中怎么用这些设计模式,于是他们认为设计模式是“看上去很美”的“花拳绣腿”。其实这些朋友正处于“设计模式了解级”,根本还没有入门。

1.3.3 如何学习设计模式

结合作者自身的经验,给出以下学习设计模式的建议。

(1)首先要调整好心态,不要指望一蹴而就,不可浮躁。

学习和掌握设计模式需要一个过程,不同的阶段看这些设计模式会有不同的领悟和感受。

不要指望真正的设计模式的书籍是既简单又有趣的,一看就懂的。那种书籍多是属于科普性质的书籍,只是让你简单了解一下设计模式。这也是为何很多朋友总感觉“懂”设计模式,却不会在实际项目中应用设计模式。那是因为你“懂”的程度不够。

提示

要想真正理解和掌握,必须要上升到一定的难度和深度,让你看完后思考,思考后应用,然后再看、再思考、再应用,如此反复,方能成就。

“鱼和熊掌不可兼得”,因此,本书尽量在内容的深度、难度和讲述的通俗易懂、简单明了上进行均衡,以期大家能以较小的力气去真正理解和掌握设计模式。

(2)学习设计模式的第一步:准确理解每个设计模式的功能、基本结构、标准实现,了解适合使用它的场景以及使用的效果

(3)学习设计模式的第二步:实际的开发中,尝试着使用这些设计模式,并反复思考和总结是否使用得当,是否需要做一些变化。

(4)学习设计模式的第三步:再回头去看设计模式的理论,有了实际的模式应用经验再看设计模式,会有不同的感悟,一边看一边结合着应用经验来思考。比如:设计模式的本质功能是什么?它是如何实现的?这种实现方式还可以在什么地方应用?如何才能把这个设计模式和具体的应用结合起来?这个设计模式设计的出发点是什么?等等。可以有很多考虑的点,从不同的角度对设计模式进行思考。

(5)第四步:多次重复学习设计模式的第二步和第三步。也就是在实际开发中使用,然后结合理论思考,然后再应用,再思考……如此循环,反复多次,直到达到对设计模式基本掌握的水平。

简而言之,大家要注意使设计模式的理论和实践相结合,理论指导实践,实践反过来加深对理论的理解,如此反复循环,成螺旋式上升。

事实上,到了基本掌握设计模式的水平后,最后能达到一个什么样的高度,因人而异,需要看个人的思维水平和理解水平。对于这个阶段,只有一个建议,那就是反复地、深入地思考,别无他法。到了思想的层面,就得靠“悟”了。