软件工程中的设计模式

28 Aug 2024 | 5 分钟阅读

引言

它们就像现成的蓝图,你可以根据需要进行修改,以解决代码中持续存在的设计问题。这不像使用现成的例程或库那样简单,可以直接将找到的模式导入到你的程序中。模式是一种处理特定场景的通用思想,而不是一个特定的函数。模式是面向对象设计中针对典型问题的标准响应。当一个解决方案被应用于多个项目时,它最终会获得一个名称和详尽的讨论。这基本上就是模式的发现过程。

软件工程师如何使用设计模式?

软件设计模式是一种通用、可重复的解决方案,用于解决在特定环境中频繁出现的问题。

这些是解决典型软件工程问题的模型,展示了经验丰富的面向对象程序员使用的一些最佳技术。设计模式通过系统地描述和解释通用设计来解决面向对象系统中的常见设计问题。它讨论了问题、解决方案、应用时机以及后果。它还提供了示例和实现指南。

模式的描述类型是什么?

在面向对象编程中,模式可能包含有关将使用的特定对象和对象类、它们的属性和依赖关系以及通用问题解决方法的信息。大多数模式都包含正式的描述,允许在不同条件下进行复制。模式描述中通常包含以下部分:

  • 目标:模式的目标是简洁地传达问题及其解决方案。
  • 动机:它解释了问题以及该模式如何使解决方案成为可能。
  • 结构:模式的每个元素及其关系都显示在类的结构中。
  • 代码:使用最常用的编程语言之一的代码示例有助于理解模式的思想。

算法与模式

由于模式和算法都是对已知问题的通用解决方案,因此它们有时会被误解。与不断定义可用于实现目标的预定操作序列的算法相比,模式提供了更高级别的解决方案描述。对于相同的模式,不同程序中的代码可能会有所不同。

算法和烹饪食谱都需要特定的步骤才能达到预期的结果。相反,模式更像是一张蓝图;你可以看到最终产品及其属性,但要决定如何按特定顺序执行它。

四人组(GoF)

软件开发中的设计模式概念在 1994 年随着 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 的著作《设计模式 - 可复用面向对象软件元素》的出版而流行起来。四人组(GOF)是这些作者的绰号。这些作者声称,以下面向对象设计原则是设计模式的基础:

  1. 通过接口而不是可执行程序来运行程序
  2. 优先使用对象组合而不是继承。

在软件工程界,他们的书被认为是一部经典之作。尽管这本书已经出版了 25 年多,但软件工程师们仍然觉得它非常有用,并且是必读之作。它将 23 种设计模式分为行为型、结构型和创建型。

在软件工程中使用设计模式

软件开发中使用设计模式主要有两个目的。

  1. 为开发人员建立标准
    设计模式提供场景特定的标准化术语。例如,单例设计模式表示使用单个对象,因此所有熟悉单例设计模式的开发人员都将使用单个对象,并且可以互相交流程序是否遵循单例模式。
  2. 推荐实践
    设计模式是软件开发过程中遇到的问题的最佳解决方案,并且随着时间的推移不断发展。经验丰富的工程师可以通过理解这些模式来更快、更轻松地掌握软件设计。

软件工程设计模式的类型

设计模式的复杂性、详细程度以及在多大程度上可以应用于正在考虑的整个系统而有所不同。让我们以道路建设为例:您可以通过增加交通信号灯来提高交叉口的安全性,或者通过建造包含地下人行通道的多层立交桥来提高安全性。

根据《设计模式 - 可复用面向对象软件元素》一书,有 23 种设计模式,分为创建型、结构型和行为型。让我们仔细看看其中的每一个。

1. 创建型模式

这些模式提供了各种对象生成方法,可以提高代码的重用性和灵活性。

所有这些设计模式都涉及创建对象或实例化类。类创建型和对象创建型模式可以进一步分为这两个类别。对象创建模式在实例化过程中比使用继承的类创建模式更有效地利用委托。工厂方法、抽象工厂、建造者、单例、对象池和原型是创建型设计模式的示例。

2. 结构型模式

这些模式提供了各种对象生成方法,可以提高代码的重用性和灵活性。

这些设计模式旨在将不同的类和对象组合成更大的结构,从而提供附加功能。结构型设计模式包括适配器、桥接、组合、装饰器、外观、享元、私有类数据和代理。

3. 行为型模式

算法和对象之间的职责分配是行为型模式的主题。

这些设计模式旨在识别和实现对象之间通信的典型方式。行为型模式包括责任链、命令、解释器、迭代器、中介者、备忘录、空对象、观察者、状态、策略、模板方法和访问者。

结论

  1. 在软件工程中,设计模式是一种通用的、可重复的解决方案,用于解决在程序设计过程中出现的常见问题。
  2. 设计模式不是一个可以轻松转换为代码的最终设计。相反,它是一种用于解决可以在多种情况下使用的问题的解释或模型。
  3. 通过模式,软件开发人员可以使用广泛认可和理解的语言来交流软件交互。
  4. 常见的经过时间考验的设计模式比临时想法更持久,因为它们可以随着时间的推移而改进。
  5. 类实例化是创建型设计模式的基础。结构型设计模式的基础是类和对象的组合。行为型设计模式的主要重点是类的对象通信。