当前位置: 首页 > 科技观察

写了这么多年代码,你真的了解设计模式吗?

时间:2023-03-21 02:00:08 科技观察

面向对象原则、设计模式、简单设计、重构为模式……看似都是套路操作,但你有想过它们之间的关系吗?忍不住抄了《写了这么多年代码,你真的了解SOLID吗?》里的一段话:上面提到的每一项大家都耳熟能详,但我发现大部分开发者都不是很了解。为了获得最大的利益,有必要了解它们之间的关系并将所有这些原则一起应用。只有将它们作为一个整体,才有可能构建出可靠的软件。遗憾的是,我们看到的书籍和文章都是把每一个原则都罗列出来,而没有从整体上看,甚至连提出这些项目的知名大叔也没能解释透彻。所以我试着解释一下我的理解。面向对象原理(OO+SOLID)偷懒请往前看,直接参考文章《写了这么多年代码,你真的了解SOLID吗?》,记得回来哦~简单的理解,面向对象原理为我们提供了一系列的最佳实践和指导在面向对象原则和最终目标的背景下,遵守这些原则可以帮助我们最大限度地发挥OO的威力。如果说面向对象比喻为软件开发领域的一所武术学校,那么面向对象原则就是这所学校的终极心态和目标,肩膀和臀部,肘部和膝盖,手和脚……这种东西。心法玄妙,果然看起来简单,从字面理解起来也不难。很容易拿来挑战别人:“看看你,你手脚的协调性还没有达到!”但是回到我们实现起来难,知易行难!究其原因,虽然它提供了目标和评价标准,但我们很容易用他来评价别人,却没有告诉我们如何实现这样的目标和目标。标准。设计模式(DesignPattern)什么是设计模式?包括我在内的很多人都对这23种设计模式着迷。当他们第一次接触设计模式时,就惊叹于它的精妙之处,犹如初入江湖的新生。一不小心掉进了一个山洞里,顿时集齐了威震江湖的“7种兵器”。然后……开始了长生剑切菜,碧玉刀切瓜的“幸福生活”。不仅简单的事情变得极其复杂,最让人难以忍受的是浪费一切!回到设计模式,无非是在对象原理等虚幻的“心法”指导原则下,前辈大师留下的“动作”或“套路”而已。但是动作和套路是赢不了的。它们只是为我们这样的小白提供了一个接近高手,领悟心法的途径。通过多年的模仿、反思、感悟,领悟到“心法”的精髓和精妙,此时?里李连杰夏练三九、冬练三伏的画面已经忍不住了脑海中出现……这可以解释为什么同样的招式,高手们总能一击必杀,而我们却总是被推倒在地,被蹭到没了的原因。简单设计(SimpleDesign)设计模式就是套路和动作,那么什么是简单设计呢?首先,我们需要区分简单设计和容易设计:简单的反义词是复杂的,容易的反义词是困难的。简单并不意味着容易,追求简单的过程往往是艰难的,如果只追求简单往往会导致系统过于复杂。这是多年前一位同事提到的一句话。从某种意义上说,我们经常混淆简单和轻松。关于这一点,另一位同事也写了一篇文章来解释如何实现“简单”的“难点”。由此产生的简单设计几乎可以被所有人理解,但只有少数人可以制作。或者反过来。简单的设计是只有少数人可以做出的设计,但是一旦设计出来,就可以被所有人理解。可见,简单的设计是只有极少数人才能做出的设计,那么我们如何才能成为那个“极少数人”呢?KentBeck对此给出了明确的回答:Passalltests(通过它的测试)asmorepossibleMayeliminateduplication(最小化重复)Expressasclearaspossible(Maximizesclarity)Fewercodeelements(有更少的元素)以上的重要性四大原则依次递减。这组定义称为简单设计原则。我们不会详细讨论这些原则,而是回到最初的问题。如果说面向对象的原则是“心”和“目标”,设计模式是前人积累的“套路”和“动作”,那么简单的设计又是什么呢?我认为这是实战的指导原则。它让我们不拘泥于以往的经典招式,跳出套路,不用招式取胜。如果设计模式是自上而下的方式通过不断模仿前人的套路来达到目的(无招取胜);那么简单的设计原则就是另一种自下而上,忘掉招式和套路,遵循简单的基本原则,随机应变,不断进化和浮现,逐渐接近目标的另一条路径(无招致胜,但有一个技巧)。但是,请记住,不同的路径导致相同的目标。那么客官问,两条路可以帮助我们掌握武功目标和心法,我应该走哪一条?如果我已经掌握了一个,我还需要学习另一条路吗?说到RefactortoDesignPattern,就不难理解《RefactortoDesignPattern》讲的是什么了。无非是解释设计模式是如何通过自下而上应用简单的设计原则并使用重构技术和技巧而出现的。我把这个过程称为“重走长征”,重新体验那些大师们创造和发现设计模式的过程。这个过程也再次证明,这两种通向同一目标的不同路径也是可以相互转换的,它们只是面向对象原则下的两种不同表现形式。如果说“设计模式”是“无招取胜”,“简单设计”是“无招取胜”,那么“重构到模型”就是“不招不招”的过程.总结总的来说,我们可以把这些概念看成一个整体框架。“面向对象原则”是OO领域的终极目标,是面向对象武术的心法。用来评判别人很容易,自己却很难做到。为了达到心境,前辈师傅总结,留下了一些套路招式,比如降龙十八掌,让后辈刻意练习,日复一日,不断领悟真谛。请记住,这些套路和动作是“设计模式”。但是仅仅这十八招显然是不够的,所以我们学习了一些实用的指导原则,让我们用另一种方式,从下到上,跳出招式和套路的限制,甚至不断的涌现出新的招式,并导致同样的目标,这些实用的指导原则是“简单的设计原则”。***,不断练习“重构到模型”,通过实际运用实战指导原则和技巧,推演招式和套路,帮助我们将这两种方法融为一体,相互结合,最终明白其中的道理隐藏一切表象,达到无招胜有招的境界,一草一木竹石皆可为刀剑,心行自如,人随心行。【本文为专栏作者“ThoughtWorks”原创稿件,微信公众号:Thinkworker,转载请联系原作者】点此查看该作者更多好文