V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ericliu001
V2EX  ›  分享发现

设计模式系列 · 无从下手的困惑 (一)

  •  
  •   ericliu001 · 2017-05-08 13:46:26 +08:00 · 1045 次点击
    这是一个创建于 2559 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"]

    设计模式系列·王小二需求历险记(一)

    设计模式系列·王小二需求历险记(二)

    设计模式系列·封装、继承、多态

    设计模式系列·初探设计模式之王小二的疑问

    设计模式系列·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 哥!"

    欲知后事如何,且等下篇文章。^_^

    end

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1311 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:37 · PVG 07:37 · LAX 16:37 · JFK 19:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.