Logo
Section 1 / 5

软件中的模式

让我们来看看如何在软件开发中使用设计模式。

导入

软件中的模式

让我们来看看如何在软件开发中使用设计模式。

软件开发与设计模式

软件开发是困难的。它本质上是在多种制约因素之间寻求平衡,同时努力缩小问题域与解决方案模型之间的差距。

更糟糕的是,我们往往必须在对这些模型的理解尚不完整的情况下就开始工作。计算机是一个毫不宽容的执行环境。我们必须在多个层面上不断应对并驯服复杂性,而且在表达解决方案时必须做到极其精确和正确。

![](http://network.jancsitech.net:9000/pageflux-ai/images/general/202509/1758018239469067660.png)

基于这一视角,我们认为设计模式是每位软件开发者技能体系中的宝贵工具。然而,它们也是本行业中被误解最深的概念之一。

这些批评并非毫无道理。在过去,许多设计中曾过度推测性地使用设计模式,尤其是在 Java 社区中尤为常见。其结果往往是堆叠了多层抽象,偏离了原始问题的核心,反而让人陷入繁琐的实现细节之中。毕竟,维护一个 AbstractFactorySingletonDecoratorBuilder-PrototypeFlyweight 这样的结构,并不是我们选择编程的初衷。

批评之声

其他批评则源于设计模式提出后的多年实践:

  • 设计模式的概念源自建筑师克里斯托弗·亚历山大(Christopher Alexander)的工作。自从大型软件项目兴起以来,软件行业便从建筑学领域借鉴了大量的术语和设计理念。

  • 但有时这些类比被过度延伸,超出了实际应用和合理性的边界。早期关于设计模式的大量衍生文献就存在这种问题,它们因对这项精彩工作的热情而产生,却逐渐偏离了本质。

  • 专注于撰写模式本身而非直接解决实际问题,导致出现了一道鸿沟:

    • 模式如何应用于我们正在编写的实际程序,并不总是清晰明了;
    • 它们究竟解决了哪些有意义的问题?
  • 模式被过于抽象地看待,这与亚历山大最初的意图相去甚远。

亚历山大的模式思想

  • 亚历山大著作中的模式,是对不同情境下反复出现的问题所提出的简洁而优雅的解决方案。
  • 他的模式面向物理世界,关注城镇与建筑的营造本质,其哲学核心在于让建筑“活”起来。
  • 他提倡通过一种共通的语言来引导协作式建造,即所谓的“模式语言”(pattern language)。
  • 在亚历山大看来,这种语言是一种具有生成能力的、非机械化的结构,能够持续演化和发展。因此,在他眼中,模式更多是一种沟通工具,而非具体的技术方案。

为什么软件开发中需要设计模式?