# 如何学习设计模式

# 为什么要学习设计模式

  1. 软件开发越来越快,对软件设计的要求也越来越高,而软件设计和架构的入门功夫就是深入理解和掌握设计模式,因此,设计模式的重要性不言而喻。
  2. 设计模式已经称为软件开发人员的“标准词汇”
  3. 学习设计模式是个人提高的捷径
  4. 不用重复发明轮子

# 学习设计模式的层次

  1. 基本入门级 要求能够正确理解和掌握每个设计模式的基本知识,能够识别在什么场景下,出现了什么问题,采用何种方案来解决它,并能够在实际的程序设计和开发中套用相应的设计模式
  2. 基本掌握级 除了具备基本入门级的要求外,还要求能够结合实际应用的场景,对设计模式进行变形的使用 事实上,实际开发中,经常会碰到根标准模式的应用场景有一些不一样的情况,此时要合理的使用设计模式,,就需要对他们适当的变形,而不是僵硬的套用了。当然能变形的前提是要能准确的深入的理解和把握设计模式的本质,万变不离其中,只有把握住本质,才能够保证正确变形使用而不是误用
  3. 深入理解和掌握级 除了具备基本掌握级的要求外,更主要是从思想上和方法上吸收设计模式的精髓,并融入到自己的思路里面去,在进行软件的分析设计的时候,能随意的,自然而然的应用,就像是自己思维的一部分

# 设计模式的学习

事实上,实际开发中,稍微复杂点的应用,在解决某个问题的时候,就不再是单一的应用某一个设计模式,而是中和应用很多的设计模式。**例如:**结合着某个具体的情况,很可能需要把模式A进行简化,结合上模式B的一部分,再组合应用变形的模式C。。。。。。,如此来解决实际的问题

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

简单点说:

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

至于有这样疑问的朋友来说: 设计模式的书看了不少,觉得都看懂了,就是不知道在实际开发中怎么用这些设计模式,从而认为设计模式是“看上去很美”的“花拳绣腿”。那么“恭喜”这些朋友,你正处于对“设计模式了解级”,根本还没有入门


# 如何学习设计模式?

结合自身的经验,给出如下学习设计模式的建议:

  1. 首先要调整好心态,不要指望一(足就)而就,不可浮躁 学习和掌握设计 是需要有一个过程的,不同的阶段看这些设计模式会有不同的领悟和感受。不要指望真正的设计模式的课程是又简单又有趣的,一看就懂的,那种课程多是属于科普性质的,只是让你简单了解一下设计模式。这也是为何有很多朋友总感觉“懂”设计模式,却不会在实际项目中应用设计模式了,因为你“懂”的程度不够。 要想真正理解和掌握,必须要上升到一定的难度和深度,让你学完后思考,思考后应用,然后再学、再思考、再应用、如此反复,方能成就。“鱼和熊掌不能兼得”

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

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

  4. 第三步: 再回头去看设计模式的理论,有了实际的模式应用经验再看,会有不同的感悟,一边看一边结合着应用经验来思考。比如:

    1. 设计模式的本质功能是什么?
    2. 它是如何实现的?
    3. 这种实现方式还可以在什么地方可以应用上?
    4. 如何才能把这个设计模式和具体的应用结合上?
    5. 这个设计模式设计的出发点是什么?
    6. 等等,可以有很多考虑的点,从不同角度对设计模式进行思考
  5. 第四步 多次重复第二步第三步。也就是在实际开发中使用,然后结合理论思考,然后再应用,再思考。。。。如此循环反复多次,直到达到设计模式基本掌握的水平

    简而言之:要注意让设计模式的理论和实践相结合,理论指导实践,实践反过来加深对理论的理解,如此反复循环,成螺旋式上升 事实上,到了基本掌握设计模式的水平后,最后能达到一个什么样的高度,因人而异,得看个人的思维水平和理解水平,对于这个阶段,只有一个建议,那就是反复的、深入的思考,别无他法,到了思想的层面,就得靠“悟”


# 讲解模式介绍

  1. 每个模式的讲述结构

    1. ♦初始某个设计模式 包括这个模式的:定义、结构、参考实现
    2. ♦体会某个设计模式 包括:场景问题、不用设计模式的解决方案、使用模式的解决方案
    3. ♦理解某个设计模式 主要是模式讲解部分,包括:认识某个模式、针对各个重点难点功能,或是与实际应用结合的讨论示例、模式的优缺点
    4. ♦思考某个设计模式 包括:模式的本质、对设计原则的体现、合适选用
  2. 对每一个设计模式进行内容分级

    1. 初级内容 从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示列等等,让读者能系统、完整、准确的掌握每个模式,培养正确的“设计观”
    2. 中高级内容: 深入探讨如何理解这些模式,模式中蕴含什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点,和其它模式的关系等等,以其让读者劲量去理解和掌握每个设计模式的精髓所在。