设计模式的作用

      设计模式描述的是软件设计,因此它是独立于编程语言的,但是最终实现仍然要使用编程语言来表达。设计模式不像算法技巧,可以照搬照用,它是建立在对“面向对象”纯熟、深入理解的基础上的经验性认识,掌握面向对象设计模式的前提是首先掌握“面向对象”!

      有时我们可能会问:模式虽好,但是不会使代码更复杂吗?

    代码复杂与否很多时候是主观的。人们对模式的熟悉程度极大地左右他们如何看待基于模式的重构。当他们不熟悉某个模式时,会认为模式过于复杂,而熟悉了某个模式之后,通常就不会这么认为。

    模式是前人智慧的结晶,重用这种智慧是非常有益的。通常,实现模式有助于去除重复、简化逻辑、澄清意图、提高灵活性。尽量地学习更多的模式,而不要认为模式太复杂而不使用模式。

    但是,有些模式确实使代码更复杂。出现这种情况,就应该返回做进一步的重构(发现问题再处理,而不是凭空担心)。

    应用设计模式的最好方式就是:重构为模式(Refactoring to Patterns)。也就是说,不是不加变通地套用模式,而是通过重构渐进地引入设计模式,这样才可能避免过度设计。重构使我们的注意力集中在去除重复、简化代码、澄清意图,从而使我们更明智地使用模式。

      在哪里应用设计模式的一个重要指标就是:看哪里有变化点。

    设计模式建立在对系统变化点的基础上进行,哪里有变化点,哪里应用设计模式。设计模式应该以演化的方式来获得,系统的变化点往往经过不断演化才能准确定位。

      这个也有一个很有趣的比喻:变化点就像武功中的“破绽”。风清扬传授的“无招胜有招”的独孤九剑要诀,就是寻找对手的“破绽”,只要找到了对手的破绽在哪里,就把剑尖指向哪里,敌人即不战自败。应用设计模式的时候,要先找到哪里会发生(需求的)变化,然后在那里寻找合适的模式并运用。在不会发生任何变化的地方,是不需要使用设计模式的。

      设计模式的危险就是:为了使用模式而使用模式,把任何需求都看作模式的拼凑,一开始就使用模式来设计。正如学习武功而痴迷于招式,同样会走火入魔。模式不是目的,目的是更好地设计。只有明智地使用模式,才能为我们带来模式的乐趣。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏斑斓

变化驱动:正交设计

一个出发点 当谈起软件设计的目的时,能够获得所有人认同的答案只有一个:功能实现。 因为这是一个软件存在的根本原因。 而在计算机软件发展的初期,这一点也正是所有...

42670
来自专栏微服务生态

技术书写作你要知道的几件事

写作是非常系统性的工程,需要作者和策划一起设计写作的路径,根据读者的阅读情景、需求考虑内容的呈现形式。如果可以切实从读者出发,首先满足知识性需求,其次满足阅读的...

9740
来自专栏腾讯移动品质中心TMQ的专栏

敏捷测试- 快速俘虏产品 & 开发

快速互联网的状态下,测试的价值体现在哪里?俗话说,长江后浪推前浪,前浪拍死沙滩上。我们在新人面前标签应该不仅限于工龄属性上的增长,在经验累积上也是有加分项的。那...

22770
来自专栏ThoughtWorks

变化驱动:正交设计|洞见

本文首发于InfoQ: http://www.infoq.com/cn/articles/change-driven-orthogonal-design 一个...

33940
来自专栏数据小魔方

大道至简——论如何最优雅的操纵json地图数据

前不久写的那个,关于如何提取json格式数据地图素材中的相关数据,来适应ggplot2场景下的数据框作图,其实那个代码写的一直都没有通用性。 导致我每做一一个需...

43150
来自专栏ImportSource

DDD究竟是个啥?怎么落地?

领域驱动设计(Domain Driven Design,以下简称DDD)这个话题,经常会出现在各大技术圈。特别是微服务出现后,海内外的大佬们又把微服务和DDD放...

26930
来自专栏web前端教室

对于零基础同学来讲,javascript有多难掌握?

你是零基础,那么你用什么方式,可以快速的实现js的运用自如呢? Javascript是一门脚本语言,它没有复杂的内存管理,只有一个进程,变量随便什么都可以储存...

18390
来自专栏企鹅号快讯

11年C/C+开发经验的大神给小白学习C语言的一些建议,自学不再迷茫!

我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET ,这...

24650
来自专栏Albert陈凯

大数据人工智能词汇索引TUVWXYZ大数据人工智能词汇索引

大数据人工智能词汇索引 T ---- T字节(TB: Terabytes):约等于1000 GB(gigabytes)。1 TB容量可以存储约300小时的高清视...

29160
来自专栏CDA数据分析师

业界 | 为什么Jupyter是数据科学家们实战工具的首选?

大型综合巡天望远镜(Large Synoptic Survey Telescope,LSST)坐落在智利安第斯山脉帕穹山脊,计划 2022 年启用。它将自动探测...

10520

扫码关注云+社区

领取腾讯云代金券