---
title: Design Patterns
localeTitle: 设计模式
---
## 设计模式

设计模式是解决常见设计问题的常见设计方案。相关字段或域的设计模式集合称为模式语言。请注意，其他级别也有模式：代码，并发，体系结构，交互设计......

在软件工程中，软件设计模式是软件设计中给定上下文中常见问题的通用可重用解决方案。它不是可以直接转换为源代码或机器代码的完成设计。它是如何解决可在许多不同情况下使用的问题的描述或模板。设计模式是形式化的最佳实践，程序员可以在设计应用程序或系统时使用它来解决常见问题。

面向对象的设计模式通常显示类或对象之间的关系和交互，而不指定所涉及的最终应用程序类或对象。暗示可变状态的模式可能不适合函数式编程语言，某些模式可能在内置支持解决他们试图解决的问题的语言中变得不必要，而面向对象的模式不一定适合非对象面向语言。

设计模式可以被视为计算机编程的结构化方法，介于编程范例和具体算法之间。

推广该领域的书是Gang of Four（GoF） **设计模式：可重用面向对象软件的元素** （1994）。它呈现了一系列（23）模式的传统（C ++）OO语言分为三种类型：

*   **Creational** （创建对象）：抽象工厂，构建器，工厂方法，原型，单例。
*   **结构** （组成对象）：适配器，桥，复合，装饰，立面，flyweight，代理。
*   **行为** （在对象之间进行通信）：责任链，命令，解释器，迭代器，中介，备忘录，观察者，状态，策略，模板方法，访客。

模式可用于多个目标（学习，沟通，改进工具），但在敏捷中，它们应该从具有技术债务的代码重构而不仅仅是在开始时添加（紧急设计/架构），因为最初您没有足够的知识关于即将发展的（未来）系统。请注意，可能不需要或者已经成为另一种语言或工具的一部分，需要语言或工具中的模式。框架是一组协作类，它们构成了特定类型软件的可重用设计，并且通常是模式繁重的。

#### 更多信息：

*   [维基百科的设计模式](https://en.wikipedia.org/wiki/Software_design_pattern)
*   [关于GoF书的维基百科](https://en.wikipedia.org/wiki/Design_Patterns)
*   [源制作设计模式](https://sourcemaking.com/design_patterns) ：在线提供的众所周知的模式列表
*   [游戏编程模式](http://gameprogrammingpatterns.com/) ：关于游戏开发中常用的设计模式的书，可在线免费阅读
*   [面向对象设计](http://www.oodesign.com/)
*   [初学者设计模式指南](https://code.tutsplus.com/articles/a-beginners-guide-to-design-patterns--net-12752)
*   [从设计模式到类别理论](http://blog.ploeh.dk/2017/10/04/from-design-patterns-to-category-theory/)