如何高质量学习与正确运用设计模式
无论是前端,还是后端,设计模式都很重要。
一、什么是设计模式
设计模式就是为了解决过去项目中经常遇到的问题而提炼出来的解决问题的方案。如果你还是很那理解的话,你可以去网上查一下资料,多查几个答案,从不同角度去理解。
二、有哪些常用的设计模式
建议找一本书静下心来好好看看,比如 Head First 设计模式,一定要看完,最好看两遍,因为每次看你都会有不同的理解,不用去记设计模式,去理解就好了。
三、设计模式的核心:可扩展性
设计模式的核心是让代码具有可扩展性。可扩展性又可以分为
自己扩展自己
第三方扩展。
扩展性的根基:可读性
我们要让代码具有可读性,没有可读性的代码,太可怕了,万恶之源。代码是最好的文档,没有可读性的代码,可扩展性无从谈起。可读性包括代码排版、变量命名规范、代码结构和恰当的设计模式的运用。为什么大家这么讨厌别人的遗留下来的项目,十之八九是可读性太差,扩展性没有,改一处而动全身。有时候我们经常要在性能和可读性上做抉择,请尽可能选择可读性。性能上差别一般情况不会太大,特别是前端。
对框架而言,需要同时考虑自己扩展自己和第三方扩展。而对于普通项目来说,更多的是考虑自己扩展自己。不管谁扩展谁,关键是如何运用设计模式。
四、如何运用设计模式
换而言之,如何运用设计模式让自己的代码具有可扩展性。
你在看一些开源框架的时候,发现框架里面到处都是设计模式,还有很多变种,当你没有把设计模式融汇贯通的时候,你会觉得这些大牛确实牛逼,但是老是把一些很简单的功能写得很绕。如果你也有这种想法,要么大牛水平不行,要么你就根本没有理解大牛意图。
恰到好处的运用设计模式
代码有了可读性以后,我们就可以进一步升华我们的代码:恰到好处的运用设计模式。为什么要强调恰到好处呢?我见过很多人过度设计的代码,包括我自己,时间花了不少,最后发现这个设计从来没有用上,反而让代码变得匪夷所思。如何判断自己有没有过度设计呢,这是一个非常复杂的自我博弈过程,需要丰富的经验,给大家一个模糊的判断方法:比较犹豫要不要在此处使用某个设计模式的时候,那就选择不要。因为过度设计很可怕,比不设计还糟糕。
运用设计模式,首先你需要了解什么是设计模式,有哪些常用的设计模式;然后在去看开源框架、造轮子,去真正理解大牛们是如何运用设计模式的,以及为什么要在这里运用这个设计模式;最后你将设计模式运用到你自己的代码里。开始可能会有点生硬,慢慢会变得越来越自然,此时,你已经将设计模式融会贯通了,因为你学会了将设计模式在真实场景下如何做少量调整,而早期可能只会死搬硬套。
看开源框架、造轮子
看开源框架,刚开始比较痛苦,发现好多地方看不懂,比如我早期看 Spring 的源码的时候,就有很多地方不太理解,比较有挫败感,不过,这都是很正常的,因为开源项目往往比较复杂,而且可能还有一些历史包袱的存在。看懂多少算多少,不必强求,下次在使用这个功能的时候,反复看看,每次看,你都会有更进一步的理解。到最后发现你几乎能全部看懂。看开源项目的速度变快,因为每当你看到某处使用到了某个设计模式的时候,自然而然推测出这个功能是怎么实现的了,以及这样实现会带来什么好处。
看懂源代码,甚至发现框架的设计还不是最好的,或者在你的场景下不是最好的,这个时候,可以尝试去造轮子,造轮子的过程是吸收别人优秀的设计,去掉别人不足的地方,再有点自己的创新那就更好了。
五、在普通项目中使用设计模式
除非特别简单的小项目,不然肯定很多地方都可以用到设计模式,你曾经有没有感觉到自己的代码能力上去呢?其实,是你在不知不觉中领悟到了一些设计模式,只是你不知道这也是设计模式。设计模式无处不在,当你发现某一个功能使用这个方式比较好的时候,”这个方式“就是设计模式,你以后遇到同类型问题,就会不假思索的使用这个设计模式。这也是为什么老手写代码比新手要快的原因,新手需要思考、选择不同设计模式来适合场景。当你感觉对自己发现的设计模式没底的时候,就需要系统的学习设计模式了,看大量的开源项目,向大牛学习他们是如何运用设计模式的,然后在自己的项目中融会贯通。
六、写在最后
设计模式无处不在,在实际的项目当中,设计模式不能死搬硬套,适当变通,才是使用设计模式的关键,也是难点。框架使用设计模式让框架更具扩展性,而设计模式也能帮助框架使用者更好地理解框架作者的意图。
七、相关链接
评论