为什么以及如何学习设计模式?

从架构三高的角度来说,设计模式的主要目的就是实现代码层面的高可扩展。另外设计模式定义的团队高效沟通的通用语言。
就团队当前代码的实现来看,绝大部分业务代码是使用面向对象的语言编写面向过程的代码。希望通过学习设计模式,结合面向对象的思想,能够实现抽象良好、高可扩展、对业务有一定的前瞻性的优秀代码。同时也希望团队成员之间能组织 Code Review,在业务与技术的之间取得平衡,促进个人良性的、可持续的、长期主义的发展。

模式的历史

模式是面向对象设计中常见问题的典型解决方案。 同样的解决方案在各种项目中得到了反复使用, 所以最终有人给它们起了名字, 并对其进行了详细描述, 这基本上就是模式被发现的历程。
模式的概念是由克里斯托佛·亚历山大在其著作 《建筑模式语言》 中首次提出的。 本书介绍了城市设计的 “语言”, 而此类 “语言” 的基本单元就是模式。 模式中可能会包含对窗户应该在多高、 一座建筑应该有多少层以及一片街区应该有多大面积的植被等信息的描述。
设计模式:可复用面向对象软件的基础》 一书, 将设计模式的概念应用到程序开发领域中。 该书提供了 23 个模式来解决面向对象程序设计中的各种问题

设计模式是什么?

设计模式是软件设计中常见问题的典型解决方案。模式并不是一段特定的代码, 而是解决特定问题的一般性概念。
为了进一步明晰概念,这里与另一个容易混淆的概念——算法做比较。两者在概念上都是已知特定问题的典型解决方案。 但算法总是明确定义达成特定目标所需的一系列步骤, 而模式则是对解决方案的更高层次描述。 同一模式在两个不同程序中的实现代码可能会不一样。算法更像是菜谱: 提供达成目标的明确步骤。 而模式更像是蓝图: 可以看到最终的结果和模式的功能, 但需要自己确定实现步骤。

模式包含哪些内容?

如何标准地描述模式:

  • 意图:简单描述问题和解决方案。
  • 动机:进一步解释问题并说明模式会如何提供解决方案。
  • 结构:展示模式的每个部分和它们之间的关系。
  • 编程语言代码实现(optional)
  • 适用性(optional)
  • 实现步骤(optional)
  • 与其他模式的关系(optional)

    Last But Not Least

    设计模式需要避免的误区 ——“如果你只有一把铁锤, 那么任何东西看上去都像是钉子”
    设计模式也在不断演化,除了 GOF 23 种经典的设计模式外,又发现了几十种面向对象的模式。
    模式的争议也一直存在,当所选编程语言或技术缺少必要的抽象功能时, 才需要设计模式。 在这种情况下, 模式是一种为语言提供更优功能的蹩脚解决方案。例如, 策略模式在绝大部分现代编程语言中可以简单地使用匿名 (lambda) 函数来实现。
    学习模式是为了超越模式,就好比武学中的招式,当忘记所有招式的时候才是新境界的开始!

以下是个人学习和积累的设计模式思维导图:
image.png