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