在课程中,咱们陆续学习了所有的24种设计模式,在实验中也用到了工厂模式、抽象工厂模式、策略模式等内容;在课程的考试中,咱们也将使用制定的设计模式对代码进行优化,为了更好的理解设计模式,转发本篇斯认为质量较好的博文,但愿能对设计模式有更明晰的认识。html
转自: 设计模式大杂烩(24种设计模式的总结以及学习设计模式的几点建议) 做者:zuoxiaolong8810(左潇龙),转载请注明出处。android
迄今为止,LZ已经将24种设计模式介绍完了,其中包括GOF23种设计模式以及简单工厂模式,这些设计模式之间并非彻底独立的,而是互相之间,会有一些相同的影子,下面咱们来一块儿总结下这24种设计模式。算法
以上即是设计模式的分类以及各个模式的传送门,能够看到其中行为型模式的个数为最多,结构型次之,建立型设计模式最少。编程
在写这篇文章的时候,LZ考虑的最多的一个问题就是,从哪几个维度去对比设计模式能让你们更加清楚的看出各个设计模式的区别与联系,思来想去,LZ决定从如下几个维度去对比设计模式。设计模式
以上即是24种设计模式的各个特色与部分模式的对比,若是总结的过程中有疏漏或是错误,请各位不吝赐教,LZ感激涕零。数据结构
此外须要说明的是,上面的几率当中有的会出现99.99999%这样的数字,这是由于这个模式已经嵌入到JAVA类库或是咱们经常使用的开源框架当中(标注一下:LZ总结的主要针对WEB开发,android的开发LZ并未接触过,因此不包括在此列),好比迭代器模式,只要你使用过ArrayList或者HashSet,LZ就认为这个模式被使用。这个使用频率从某种意义上讲,能够认为是该模式的重要程度,固然因为这个频率是LZ制定的,因此仅表明我的观点。架构
这里再针对设计模式的学习,给各位提一点点建议,仅供参考,请各位吸优排差,次序不分前后。框架
一、以前说过,学习设计模式除了努力以外还要靠缘分,因此若是有设计模式当时怎么看都不明白,能够暂且放下,以后说不定哪天你忽然之间就明白了。(此话并不是虚言,LZ不少次的顿悟常发生在上厕所、洗澡、回家路上等一些学习以外的时候。)post
二、对于已经在工做的人来讲,能够常思考一下,有没有哪一个设计模式能够改善现有的系统架构,但不要轻易付诸实践。学习
三、学习设计模式以前,必定要先整明白UML类图,什么关联,依赖,聚合,组合等等都得搞明白儿的,不然学习起来也依然会很吃力。
四、对于初学者,必定要在弄清楚标准的实现代码以后,写一个属于本身的例子,哪怕是比葫芦画瓢,而后仔细体会设计模式使用先后的差别,主要从扩展性和类(类包括客户端,而不只仅指设计模式中的角色)的职责两个方面。
五、必定要将设计模式的变化点搞清楚,这点很是重要,甚至重要程度高于设计模式的场景、实现方式以及类和对象之间的耦合关系,不少时候,设计模式的滥用就是由于变化点没搞清楚,以致于该变化的没变化,不应变化的常常变化,增长系统的负担。
六、设计模式不是一次性学习完就能够扔掉不看的东西,而是要常常回过头来看看,说不定每一次你都有不同的体会,并且通常状况下,这些体会会愈来愈深入,愈来愈透彻。
七、若是可能的话,多研究一些开源框架,去找找它们里面的设计模式。
LZ暂时也就只能想到这些,若是之后有想到再补充吧,各位若是有什么好的建议也能够与LZ分享一下。
到此为止,整个设计模式系列就真真正正的完全结束了,当初写的时候也没想到本身能够真的坚持下来,虽然说整整26篇文章不算多,可是LZ确实花费了大量的时间和精力,值得欣慰的是LZ本人也获得了巨大的收获,不只仅是对设计模式的理解日益加深,并且还得了很多猿友的支持,让LZ对分享这一道路更加坚决。
之后的编程之路还很长,对于LZ来讲,编程并不只仅是工做,而是一份事业,它给了LZ荣誉、金钱、成就感等等不少东西,但愿各位至少在年轻的时候不要被一些悲观化的观点所干扰,特别是对编程有着热爱的猿友们,极致才能成就大道,但凡在一个领域有所成就者,大都是钻研了数十年的成果。
固然,人各有志,LZ没法左右他人,但LZ已经决定了本身的路,学火影里鸣人的一句话,“这就是个人忍道。”