前言
以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:”聊聊代码”]
设计模式系列·王小二需求历险记(一)
设计模式系列·王小二需求历险记(二)
设计模式系列·封装、继承、多态
设计模式系列·初探设计模式之王小二的疑问
设计模式系列·Facade模式之MVC的烦恼
设计模式系列·Adapter 模式之如何优雅的使用别人的轮子
设计模式系列·类爆炸之Bridge模式
设计模式系列·工厂方法模式之 Code Review
设计模式系列·抽象工厂模式
小二的困惑
最近,小二跟着C哥学了不少设计模式,写代码的功夫可谓更上一层楼。
但是当小二单独面对新的项目时,想用学过的设计模式来解决问题,往往无从下手。
这样尴尬的处境令小二很是苦恼。于是,小二决定去请教万能的C哥…
C哥最近不怎么忙,此时正坐在他的人体工程学椅上幽闲的喝茶呢。
小二找到C哥,坦诚的说出了自己的困惑。
“哈哈,小二。这很正常,这是蜕变的必经之路。”
“这么说当初您也经历过?”
“肯定啊,当初我也有相同的困惑。”
“哈哈,太好了,烦请C哥不吝赐教!”
思维误区
“小二,我们一步步来。当你面对一个项目时,你的设计思路是什么?”
“嗯…我仔细想想…”
过了一会,小二说到:”
我仔细的想了一下,分3个步骤吧:
1、先识别出我需要的类;
2、开始设计这些类的功能;
3、将类组合到一起,形成一个整体。”
“哈哈,不错。但你有没有发现问题?”
“嗯?有问题吗?”
“很多人都会这么做,但这会带你进入误区。”
“啊?这还有误区?头一次听说。”
面对小二的疑惑,C哥耐心的解释道:”
其实,最早发现这个误区的,是国外的一名建筑学家。
他的观点是:”从片段开始建设,不是一个好的设计方法。”
“不太明白,为什么这么说呢?”
C哥继续说道:”你有没有发现,在你做第2步:着手设计类的功能的时候,你这时候就开始了设计。但你设计的主要精力放在了类的功能上,慢慢的,你就按照同样的思路,设计出来基本一致的类。然后你再把这些基本一致的类拼装到一起,形成一个整体。”
“对!确实是这样!”
“哈哈,这就是问题了。”
“C哥,你能说的再具体一点吗?”
“就是说:你这样设计出来的各个模块都是相似或相同的。但各部分需要与众不同,就如世界上没有两片相同的叶子一样,他们都要利用自己独有的特性,根据自己的特性而有不同的设计,从而发挥自己独有的功能。”
看小二还有点疑惑,C哥笑了笑:”我给你看两幅图,你觉的哪个更有特色?”
错落有致的房屋
错落有致的房屋
小区清一色的房子
小区房屋
“当然是第一幅图片的建筑更有特色啊,他们依山而建,每栋房屋都有自己与众不同的特点。”小二爽快的回答道。
“是啊!你过早的去设计类的功能,然后再把他们组装到一起的思路,是不会很全面的想到你要用到的设计模式的,自然而然,学了很多设计模式也就无从下手了。”
应用到软件设计中
“C哥,大体明白了您的意思。那我具体应该怎么做呢?”
“那就需要改变你之前的设计思路了。”
“嗯嗯。C哥有什么好办法?”
“我先给你说说比较好的设计思路吧:
1、理解需求,从整体的概念触发;
2、识别在整体中可能出现的模式;
3、从为其他模式创造场景的模式开始;
4、应用这些模式;
5、对剩下的模式和中途发现的新模式,重复步骤3-5。”
“啊?听起来好复杂啊!”
“哈哈,你要是一下听懂了才怪呢。”
“C哥,你能不能举些例子啊?”
“好啊,但今天有点累了,不早了,明天再说吧!正好我也回去想想…”
“嗯嗯,好的,明天再找您,感谢C哥!”