写了这么多年代码,你真的了解设计模式么?(原创)

  • 时间:
  • 浏览:7
  • 来源:bet登录入口网站

昨天和同事聊到最近他要做的有另一个培训,最少的课程是只是 的:

第一天:

  • 上午:面向对象原则(OO+SOLID )
  • 下午:设计模式(Design Pattern)

第两天:

  • 上午:简单设计(SimpleDesign)
  • 下午:重构到模式(Refactor to DesignPattern)

面向对象原则,设计模式,简单设计,重构到模式……看起来就有常规操作,但你有想过当当我们当我们 的关系么?

image

忍不住要山寨一段《写了不都不能多年代码,你真的了解SOLID吗?》中的发言:

中间提到的每一项当当我们当我们 都耳熟能详,但我发现大次要开发者并不都不能真正理解。要获得最大收益,就需要理解它们之间的关系,并综合应用所有有有哪些原则。不都不能把它们作为有另一个整体,才原因分析分析构建出坚实(Solid)的软件。遗憾的是,当当我们当我们 看完的书籍和文章就有罗列每个原则,不都不能把它们作为有另一个整体来看,甚至提出这几项的知名大叔们只是难 讲透彻。或者我尝试介绍一下我的理解。

面向对象原则(OO+SOLID )

偷懒一下,请当当我们当我们 移步,直接参考文章《写了不都不能多年代码,你真的了解SOLID吗?》,记得回来呦~

简单理解,面向对象原则给当当我们当我们 提供了一系列面向对象上下文下的最佳实践,指导原则和终极目标,符合有有哪些原则都不能 帮助当当我们当我们 最大化OO的威力。

原因分析分析把面向对象移就成软件开发领域的有另一个武林门派,面向对象原则只是 一种门派的最高心法和目标,打个比方,有点儿像:心与意合,意与气合,气与力合,肩与胯合,肘与膝合,手与足合……一种。

心法一种东西只是 神神秘秘的,真正看起来也简单,字面上只是 难理解,很容易用它来挑战别人:“你看你看,你不都不能做到手与足合!”

或者回到自己,要想做到就难了,知易行难!

归其原因分析分析它实在提供了目标和评价标准,使当当我们当我们 很容易拿他来评价别人,但并不都不能告诉当当我们当我们 自己怎样才可以达到只是 的目标和标准。

image

设计模式(Design Pattern)

那设计模式是有哪些?

只是 人,包括我在内,都曾迷陷于23种设计模式之中,初识设计模式,赞叹于其精妙,就像个萌新的江湖小生,偶然间掉到个山洞,一下就集齐了威震江湖的“7种武器”。

或者……就结束英文了用长生剑切菜,用碧玉刀削瓜的“幸福生活”,不但把简单的事情搞得巨复杂,最不都不能忍的是还暴殄天物!

回到设计模式,无非是在面向对象原则有有哪些虚无缥缈的“心法”指导原则下,有有哪些前辈大神们留下的“招式”或是“套路”而已。但招式和套路不用说能致胜,它只是 为当当我们当我们 这等小白提供了有另一个接近大神,理解心法的途径而已,通过长年累月的模仿去反思去领悟去体会“心法”的本质和精妙,此时脑中不禁浮现《少林寺》中李连杰夏练三九冬练三伏的画面……

这就能解释为有哪些使用同样的招式,大神们总能一击致命,而当当我们当我们 却突然被按倒在地摩擦的原因分析分析了。

简单设计(SimpleDesign)

设计模式是套路和招式,那简单设计是有哪些?

首不难 区分一下简单设计和容易设计:

简单的反义词是复杂,容易的反义词是困难。简单不等于容易,追求简单的过程往往很困难,原因分析分析只是 追求容易的往往原因分析分析系统过于复杂。

这是好多年前一位同事提到过的语录,很在点儿上,当当我们当我们 突然混淆了简单和容易,对于这点,另一位同事随后也写过一篇文章来阐述做到“简单”的“困难”。

做为结果的简单设计是不都不能一种设计,它能被几乎各人 理解, 但不都不能极少数人能做出. 原因分析分析反过来说也都不能 . 简单设计是一种不都不能极少数人能做出的设计,但设计一旦做出后,能被各人 理解.

可见简单设计是一种不都不能极少数人能做出的设计,只是 们为啥么不能成为那“极少数人“呢?

对此,Kent Beck给出了清晰的答案:

  1. 通过所有测试(Passes its tests)
  2. 尽原因分析分析消除重复 (Minimizes duplication)
  3. 尽原因分析分析清晰表达 (Maximizes clarity)
  4. 更少代码元素 (Has fewer elements)
  5. 以上十个 原则的重要程度依次降低。

这组定义被称做简单设计原则。

当当我们当我们 不具体探讨这2个原则,回到最初的问題报告 ,原因分析分析说面向对象原则是”心法“是”目标“,设计模式是前辈们沉淀下来的”套路”和“招式“语录,那简单设计是有哪些呢?

我实在只是 实战指导原则,他都不能 让当当我们当我们 不局限于有哪些经典的过往的招式,突然突然出现套路,无招胜有招。

image

原因分析分析说设计模式是一种自上而下,通过不断模仿前辈大神套路达到目标的二根道路语录(有招胜无招);那简单设计原则则是另二根自下而上,忘掉招式和套路,遵循简单的基本原则,随机应变,不断演进,不断浮现,逐步逼近目标的另二根道路(无招胜有招)。

但,记住,殊途同归。

好,这位客官问了,那两条道路都都不能 帮当当我们当我们 掌握武功最高的心法的目标,我走哪条呢?原因分析分析我原因分析分析会了二根,还需要学习另二根路径么?

请移步我的《一次性一次性木棍 定理》。

重构到模式(Refactor to DesignPattern)

说到这里,就不难 理解“重构到模式”到底在说有哪些了吧。

它无非是在解释怎样才能通过自下而上应用简单设计原则,运用重构的技术和手法,浮现出设计模式。我管一种过程叫“重走长征路”,重新体验一下有有哪些大神前辈们创建发现设计模式的过程。

一种过程也再次证明了这两条通往同有另一个目标的不同的道路也是都不能 相互转换的,它们只不过是面向对象原则下的一种不同形式的表现而已。

原因分析分析说“设计模式”是“有招胜无招”,“简单设计”是“无招胜有招”语录,那“重构到模式”只是 “无招生有招”的过程。

总结

总的来说,当当我们当我们 都不能 把这2个概念作为有另一个整体框架来思考。

“面向对象原则”是OO领域的终极目标,是面向对象这门武功的心法,很容易用来评判别人,或者自己却不难 达到。

为了能达到心法的境界,随后的各任掌门大神们总结并留下了一种套路和招式,有哪些降龙十八掌类事的,我要等晚辈都不能 通过日复一日的刻意练习,去不断参透心法的真谛,有有哪些套路和招式只是 “设计模式”。

但不都不能这十八招显然是不够的,于是当当我们当我们 又学到了一种实战指导原则,让当当我们当我们 以另一种最好的方式,自下而上,突然突然出现招式和套路的限制,甚至能不断浮现出新的招式,且通向的是同有另一个目标,有有哪些实战指导原则只是 “简单设计原则”。

最后,不断操练“重构到模式”,通过实际运用实战指导原则和手法,推演招式和套路,帮助当当我们当我们 将这名 种最好的方式融会贯通,相互结合,最终领悟那隐藏在一切表象转过身的真理,达到无招胜有招,草木竹石皆可为剑,心随意走,人随心动的境界。


文/ThoughtWorks王健