程序员该如何掌握设计模式?看这篇干货总结

大家好, 我是强哥。这一讲我们和你聊聊设计模式应该怎么学。

在工作的十几年时间中,很多同学都技术提升很快,能力出众,可是走着走着,就逐渐进入一个瓶颈阶段。大家都希望以最快的方式提升技能水平,而忽略了一项,就是内功心法写修炼。

这让我想起了《天龙八部》中的虚竹,他得到的武功很多是内功心法的传承,因此在很短的时间内就能快速的达到一个别人达不到的高度,反而苦苦执着于武功秘籍的鸠摩智的武功很快的到达了瓶颈。

说道者大家都应该知道,我们这里所说的内功心法指的是什么了吧, 没错正式《设计模式》,接下来我们再聊聊为什么要学习设计模式。

一.为什么要学习设计模式

之前和一些同学聊天,问过他们一些设计模式的问题:

大家普遍认识不够,大家的反馈都比较统一,比如:学习设计模式不能立竿见影的看到效果,入门简单深入较难,设计模式只有在面试的时候才会看看了解个大概,诸如此类的描述。

那么我们学习设计模式优什么用,为什么要好在学习设计模式。我们总结总结

首先,学习设计模式确实能够应付我们面试时的一些问题,能在我们面试过程中锦上添花。

其次,设计模式能帮我们摆脱烂代码,提高复杂代码的设计和研发能力。我们经常在开发过程中,尤其在设计一个功能的时候,leader经常会review大家的代码,代码风格属于一个人的固定风格,很多同学一写就是好几年,从设计的角度来看确实不像样子,每次都是功能没有问题就ok。举个例子:好比优秀厨师在5星级酒店做饭,大家都爱吃;做饭差的家人都不愿意吃你做的饭一样。

阅读框架源码,事半功倍。为了在程序上更精进,很多时候我们要阅读源码内容,不管是读的是jdk,spring,netty或者是一些其他源码,他们底层的设计思想很多都是包含了设计模式的身影,我们每次都惊叹别人脑子怎么这么聪明,吃什么长大的,为什么我就想不出来,因为这种设计模式已经植入到别人脑子里了。而你不知道,不熟悉,因此你有些源码都看不懂。设计模式学完后,你会发现,原来源码中应用了这么多的设计模式,我也能读懂,我也可以试一把。

二.设计模式应该怎么学

学习一个系列知识需要有相应的学习体系。这段的最后我们会附上设计模式的学习体系。

1.学习UML设计

我们首先要学习学习UML设计,在很多场景下我们都需要话UML图来表述逻辑的结构,程序的流程,类之间的关系,程序的拓扑结构。因此学会UML,会让我们更加容易的学习设计模式

学习其中比较常用的八种图,分别是:

用例图、类图、对象图、活动图、状态图、序列图、协作图、部署图

比如常见的类图:反映类之间的关系

比如反映参与者一系列顺序步骤的时序图

2.学习设计原则

本质上,很多设计模式需要遵循设计原则, 这里我们就设计到了7大设计原则,每一种原则都告诉我们设计程序,应该怎么设计,他的理解层次高于设计模式。

我们常用的设计原则一共有7种,分别是:单一职责原则、接口隔离原则、依赖倒转(倒置)原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则

1.设计模式

为了更高效的学习,我们将设计模式按照其自身特点分类3类,分别是创建型模式(包含了:单例模式、建造者模式、简单工厂模式、抽象工厂模式、原型模式)、结构型模式(代理模式、装饰模式、适配器模式、组合模式、桥接模式、门面模式、享元模式) 、行为型模式(包含:模板模式、命令模式、责任链模式、策略模式、迭代器模式、中介者模式、观察者模式、备忘录模式、访问者模式、解释器模式)。

接下来我们就聊聊应该怎么学:

  • 首先对每一种设计模式的概念有和用户有所了解,知道该设计模式有主要解决了哪些问题

  • 其次,要能通过UML图,看懂该模式运行流程,分析设计原理

  • 再者,能通过编码的方式实现该设计模式,或者对原有代码进行重构,看看具体有哪些好处

  • 还有,需要去认真分析,源码哪里用到这种设计模式,思考为什么这么设计,如果不这么做,会有什么问题

  • 最后,要思考在哪些场景下我们使用这种设计模式,为什么我们需要使用这个实际模式。而不是生搬硬套,切记必须要有具体的使用场景下使用设计模式,而不要为了实用设计模式而使用他,这是有本质上的区别的。

三.学习路线

很多同学已经有去学习设计模式的思考了,但是还是清除如何高效的学习设计模式。

那么接下来我们需要给大家梳理下学习的路线,学习的思路,以及选用哪些书籍,哪些免费视频教材。

1.首先,我们先来看看学习的路线:

2.其次给大家推荐几本我看过比较好的学习设计模式的书籍

第一本:《设计模式的艺术》, 这本书比较豪读,比较适合基础弱一些的同学看。

第二本:《设计模式》 这是一款很经典的书籍了,但是对于读者的要求很高,就像初学者我们不推荐《java编程思想一样》,这本书同样是需要有一定基础的同学去看

第三本《重学设计模式》,这本书简单有趣,适合初中级程序员,举例清除,代码的可读性较好,也是十分推荐的。

猜你喜欢

转载自blog.csdn.net/finally_vince/article/details/128639613