--- title: Design Patterns localeTitle: 设计模式 --- ## 设计模式 程序员和软件架构师使用设计模式来解决软件架构中**常见的,反复出现的问题** 。这些模式为**面向对象编程**提供了一种与语言无关的方法,可帮助开发人员遵循良好应用程序设计的原则。 ### 为什么设计模式? 按设计模式开发具有以下几个优点: * 遵循良好的编程原则(如**[SOLID](https://www.youtube.com/watch?v=XzdhzyAukMM) [原则)](https://medium.com/@cramirez92/s-o-l-i-d-the-first-5-priciples-of-object-oriented-design-with-javascript-790f6ac9b9fa)**更容易**。** * 它使代码块更小,因此代码更容易**测试**和**调试** * 它有助于保持代码松散耦合,因此代码更易于**重新使用**和**更新**新应用程序 * 它使代码更容易**理解** ,因此新的贡献者可以**迅速提升** 使用设计模式需要进行一些权衡,开发新手的开发人员应该记住以下内容: * 编程中**没有银子弹** ,设计模式也不例外 * 设计模式为代码添加了**一层抽象** ,增加了初始设计和开发工作 * 过度使用设计模式或强制它们适合使代码**更难**理解 ### 语言支持 设计模式源于静态类型语言的世界,如C ++,Java和C#。关于按设计模式进行开发的大多数资源都基于这些语言之一。 尽管如此,设计模式只是:模式。它们**不是**类或接口之类的实现,并且**不受任何一种语言的约束** 。 在动态语言中学习设计模式时,如果特定模式看起来不必要复杂或反直觉,请回想起它们的起源。动态语言的开发人员仍然可以使用以下设计模式并从中受益,尽管可能需要更多的研究才能完全理解它们。 ### 用途 设计模式非常适合以简单且可重复的方式解决基础编码问题。从广义上讲,它们分为三类: * **创建**模式描述了如何创建新对象 * **结构**模式描述了如何从其他对象中组合对象 * **行为**模式描述了对象如何相互通信 这些任务都可以在没有设计模式的情况下执行,但设计模式可以**降低**您违反良好实践并创建难以维护的代码**的风险** 。 #### 更多信息: * Kamran Ahmed的[“人类设计模式”](https://github.com/kamranahmedse/design-patterns-for-humans)是对特定模式的精彩介绍 * [设计模式](https://en.wikipedia.org/wiki/Design_Patterns)是开始这种实践的书 * Martin Fowler的[企业应用程序架构模式为企业应用程序](https://martinfowler.com/eaaCatalog/)提供了一套更复杂的模式 * Sourcemaking提供[在线资源,](https://sourcemaking.com/design_patterns)其中包含有关设计模式的其他示例和信息