上个小节我们简单说了一下 什么是设计模式,本节文章咱们就说说学会设计模式有哪些好处。在这里有一个非常重要的前提:学会 ,到底怎么才算是学会呢?“学会” 的标准又是什么呢?这真的是一个值得思考的问题,这绝对也是大部分初级面向对象技术人员都会面对的一个问题。

我们都知道所有的设计模式都依赖于面向对象提供的技术基础或者说基本思想实现的。因此首先你面向对象的基础砸得要足够坚实,对面向对象的编程思想要有足够得认识和深入些的理解,而 不是靠记忆背出来 的面向对象,这一点很重要。一些初级技术人员看了书之后会说:“我知道什么是观察者模式了,我知道什么是命令模式了,我知道什么是中介者模式了......” 。"我知道"有时候是一个特别自欺欺人的说法,我们觉得我们知道了,可惜大部分情况下,我们不是真的知道,很可能只是我们记住了一点点东西而已。就像高中考试做错的题,老师讲了讲,好像是知道了,让你再做一遍,很可能还是不会,明明  “我知道”  ,可怎么就还是不会呢?你的记忆欺骗了你,设计模式真的不能靠背的,背了也可以,不能只背不悟不实践。在此搬出伟大领袖毛爷爷的一句话:“实践是检验真理的唯一标准”。附上我刚入行时,我的项目经理告诉我的一句话:”你别以为看两遍别人游泳你就学会游泳了,你下了水你就知道了“。

这句话很土,但在这里非常应景儿,很适合现在咱们讨论的话题。很多设计模式的书并没有把这个问题说清楚,当然更多的是学习者没有掌握学习设计模式的正确姿势。什么问题呢?设计模式对应的问题场景的识别,也就是事发现场的侦察问题如果连事发现场是怎么一回事都不知道,上来就要直接破案,那就是乱搞嘛.每一个设计模式是为解决某一类问题而制定的解决方案,能否识别出问题场景对于 学会 至关重要,而大部分学习者在学习的时候,很多都是走马观花看看问题,然后就直奔代码狂奔而去。这样的学习者只想看赶快懂代码,然后自我满足得陶醉一下。至于为什么要这么解决问题,解决了什么问题,不这么做会有哪些风险?他很难回答上来。我们看别人游泳的时候,就简单的几个动作而已,而我们自己到了水里才会真正体会到我们需要克服的困难太多了,如何保证自己在水里不恐惧,保障自己不像油条那样左右翻滚,保障自己不会大头朝下,保障自己顺畅呼吸等等都是基本的要解决的问题,而以上只是平静的泳池里学游泳这个场景你会遇到的问题。长江黄河,星辰大海则又是不同的场景,你的应对之法则会完全不同,你的 设计模式 也会完全不同。

大部分C++程序员每进阶一步都很困难,不是说C++对面向对象支持不够好,而是 C++ 对面向对象的支持过于太全面了,基础知识想要学的非常瓷实都不容易,C++的天马行空的自由民族风更如脱缰野马,把没有定力的技术人员带着跑得越来越偏,最后只有很小比例的程序员能够真正掌控 C++ 这门语言。后来的Java, C# 等面向对象的编程语言都吸取了 C++ 的教训,它们简化并规范了面向对象的技术,去除了让人容易困惑以及难以驾驭的友元,多继承等等特性,并且对面向对象的设计做了一定的规范和限制,让程序员不那么洒脱和自由,但换来的结果却是好的,面向对象编程语言变得好用了很多,尝到了甜头的技术人员自然就更有劲头了。有一件很讽刺的事情就是,有不少技术人员学 C++ 头破血流,最后竟然都是在其它面向对象编程语言中慢慢领悟了面向对象的精髓。所以如果你现在学的是C++,一直搞不定,不想被C++的各种概念和内存分配释放搞得想放弃治疗的时候,换 Java,C#, PHP 7 搞一搞吧,你会有意外收获的~

这篇文章不是要说学会设计模式的好处吗?怎么一直没有说?因为学会之后的好处大家都知道,我们能把自己提升到更高的一个层次,在公司里拿更多的钱,生活可以过的滋润一点,然后全部贡献给房地产......  

我们总说 复用,我们复用了太多代码层面的东西,设计模式让我们能够复用别人的解决方案,复用别人的编程思想和先进经验,一旦真正掌握之后,就会”顿悟“,你真的可以做到一个打 10 个,甚至更多。否则我们无法进入到下一个阶段,如果在一个行业中,始终停留在门口,那随着时间的流逝,我们终将被后浪冲刷,而这个行业留给被淘汰者的痛苦将伴随一生,烙印难消~