文章标签 ‘设计模式’
设计模式,实际上是一些很标准的算法解决方案,如果对于一个很常见的问题,一个人使用了设计模式中的方法解决,当别人看代码的时候,也会很爽快。而如果没有,那看代码的人就会很疑惑,问题明明可以很明确的使用某种设计模式解决,那为什么原来是这样的呢?是不是有什么tricky的地方,不得不这样写?无形中延长了时间,并且增加了维护时出问题的机会。 我觉得知道各个模式所表达的算法实现各个设计模式所需要的算法还算容易,而明确的知道什么时候该用什么模式就比较难了。我也经常写出自己后悔的代码来:在写过代码后,review的时候,突然发现,其实可以用更好的方法解决问题。这就是refactoring的作用了吧。呵呵。 二、Singleton, Builder, Prototype模式 这三个模式仍然是关系到对象创建的,但这三个模式特点都很明确,比较容易找到适应的情形。再来讲三个故事: 1、从前,有一个小姑娘叫“春”(这是我高中的时候,一个同学作文中经典的句子,很难忘记~)。我们叫她“春姑娘”吧。有一天她在海边散步的时候,见到了一个油灯,上面写着“Singleton”,小姑娘很好奇,就轻轻摸了一下这些字,突然从灯里面出来了一个灯神,他跟小姑娘说:“谢谢你帮我解除了咒语,我现在自由了。只要你拿着这个灯,什么时候叫一句‘Singleton’,我都会出来。” 小姑娘有些犹豫,我不会喊来坏蛋吧?这个灯我又不熟悉。灯神大笑,这个灯叫“Singleton”,所以每次出来的都只能是我,不会是别人的。甚至替身都不会有。小姑娘高兴的回家了。 2、其实,小姑娘在家里很苦。受到继母的虐待。每天都要做饭,洗衣服,挑水,天不亮就要干活,一直要干到深夜。这天晚上,终于干完了活,睡觉之前,她把灯神交出来,想跟他聊聊天。因为她找不到别人聊天了,能找到的只有这个向她承诺过的灯神了。她把她的苦恼都跟灯神说了,灯神很同情她。(其实,这个灯神就是天界众神派来帮助小姑娘的)临走的时候,送给小姑娘一口锅,上面写着Builder这个单词。小姑娘不解,我现在还有锅啊。灯神说,这个锅是天界众神使用的锅,它的最大特点就是不用人干预就可以做出饭菜。你只需要按照这个菜谱往锅里放进原料,盖上盖子,等一会再打开,就是香喷喷的饭菜了。说着给了小姑娘一本菜谱。
最近在重新学习C++,也在看公司产品的代码,深切体会到一个大型的项目如果没有很好的代码设计,会为维护带来过大的成本。我想说的代码设计,并不是产品层次的设计,而是developer在写程序的时候,如何设计自己实现功能所使用的编码方式和模式。这就是为什么我突然决定复习设计模式了。我看设计模式还是在大学,虽然多少还有些印象,但真正能拿起来用的就那么几种经常用到的。但设计模式是针对不同问题的不同best practice,所以如果有一种不知道,就可能在coding的时候走弯路,甚至走错路。 我希望能把我复习的过程写成一系列的文章,而且不想用代码和类图来说明,因为这些东西在所有介绍设计模式的书里面都很多,我只想把我复习的心得和问题写出来。难免有错误,希望任何人指出。:) 一、Factory, Abstract Factory, Factory Method模式 这三个模式都跟Factory这个词有关系,所以都是用来创建对象的模式。我最初看到这三个模式的时候,真是有点晕,都是factory,有什么区别呢?在什么时候需要用哪个呢? 先来讲三个故事: 1、一个匪徒,我们叫他Mr. Pattern,为了要实施对一个银行进行抢劫,需要买一支武器。但他不知道买什么,所以他来到了一家叫”WeaponFactory”的武器店。他说了他想要武器后,营业员说,我们这里有A系列手枪、B系列手枪、A系列自动步枪、B系列自动步枪甚至还有Z系列火箭筒,你想要什么就去相应的柜台交钱,然后就可以拿到货了。 2、还是这个Mr. Pattern,他决定不在”WeaponFactory”买了,因为那里武器全都摆在一起,太多了,导致店铺太大,根本就没办法逛,而且据说后来因为无法再扩大营业面积最终倒闭了。这次他来到了一个叫“AbstractWeaponFactory”的店。他这回多了个心眼,透着窗户看了看,恩,这回里面不是很乱,好像店里面就摆了一个系列的产品。他不知道这个系列是不是他需要的,抱着试试看的想法,他踏入了店门。突然,一阵眩晕,等再清醒过来,看到面前摆的都是C系列的产品:手枪、步枪等等。这时,一位美丽的导购小姐走过来,对Mr. Pattern说:“感谢您的光临,我们已经根据您的需求和所处的环境,将您自动传送到我们的C系列子店中,在这里您可以买到所有您需要的产品”。Mr. Pattern幸福的晕过去。








