# 设计模式

> 原文： [https://howtodoinjava.com/gang-of-four-java-design-patterns/](https://howtodoinjava.com/gang-of-four-java-design-patterns/)

顾名思义，设计模式是设计软件时最常见（和最常见）的问题的解决方案。 这些模式大多是“进化的”而不是“发现的”。 这些设计模式总结了许多专业人士的大量学习成果。 这些模式都没有强迫您执行任何东西。 它们只是在特定情况下以特定方式解决特定问题的指南。 代码实现是您的责任。

非常重要，让我们更详细地学习这些设计模式（在 Java 上下文中）。

## 1.创建型设计模式

创建型模式通常用于代替构造器的直接实例化。 它们使创建过程更具适应性和动态性。 特别是，它们可以为创建哪些对象，如何创建这些对象以及如何对其进行初始化提供很大的灵活性。

| 设计模式名称 | 目的 |
| --- | --- |
| [构建器](//howtodoinjava.com/design-patterns/creational/builder-pattern-in-java/) | 构建器设计模式是构建复杂对象的另一种方法，仅当我们希望使用相同的对象构建过程构建不同类型的不可变对象时，才应使用构建器设计模式。 |
| [原型](//howtodoinjava.com/design-patterns/creational/prototype-design-pattern-in-java/) | 原型设计模式用于应用需要创建大量类的实例的情况，这些实例的状态几乎相同或相差很小。 |
| [工厂](//howtodoinjava.com/design-patterns/creational/implementing-factory-design-pattern-in-java/) | 当涉及复杂的对象创建步骤时，工厂设计模式最合适。 为了确保这些步骤是集中的，并且不暴露于组成类。 |
| [抽象工厂](//howtodoinjava.com/design-patterns/creational/abstract-factory-pattern-in-java/) | 每当我们需要对使用工厂模式创建的一组工厂进行另一个抽象级别时，就会使用抽象工厂模式。 |
| [单例](//howtodoinjava.com/design-patterns/singleton-design-pattern-in-java/) | 单例使应用每个 JVM 具有一个类的一个实例。 |

## 2.结构型设计模式

结构型设计模式向我们展示了如何以灵活和可扩展的方式将系统的不同部分粘合在一起。 这些模式帮助我们确保当其中一部分发生更改时，整个应用结构都不需要更改。

| 设计模式名称 | 目的 |
| --- | --- |
| [适配器](//howtodoinjava.com/2014/05/10/adapter-design-pattern-in-java/) | 适配器将类的接口转换为客户端期望的另一个接口。 它可以让类因接口不兼容而无法一起工作。 |
| [桥接](//howtodoinjava.com/design-patterns/structural/bridge-design-pattern/) | 桥接器设计模式用于将一个类分解为两部分 - *抽象*和*实现* – 以便将来可以相互进化而不会相互影响。 它增加了类抽象与其实现之间的松散耦合。 |
| [组合](//howtodoinjava.com/design-patterns/structural/composite-design-pattern/) | 组合设计模式有助于将对象组合成树形结构，以表示整个部分的层次结构。 组合可以使客户统一对待单个对象和对象组成。 |
| [装饰器](//howtodoinjava.com/design-patterns/structural/decorator-design-pattern/) | 装饰器设计模式用于向类的特定实例添加其他功能或行为，而不会修改同一类的其他实例。 |
| [外观](https://howtodoinjava.com/design-patterns/structural/facade-design-pattern/) | 外观设计模式为子系统中的一组接口提供了统一的接口。 外观定义了一个更高级别的界面，使子系统更易于使用。 |
| [享元](https://howtodoinjava.com/design-patterns/structural/flyweight-design-pattern/) | 享元设计模式允许使用对象共享，以有效支持大量细粒度的对象。 享元是一个共享对象，可以同时在多个上下文中使用。 享元在每种情况下都充当独立对象。 |
| [代理](https://howtodoinjava.com/design-patterns/structural/proxy-design-pattern/) | 在代理设计模式中，代理对象为另一个对象提供代理或占位符，以控制对其的访问。 代理大量用于实现与延迟加载相关的用例，在这种情况下，我们直到真正需要时才创建完整的对象。 |

## 3.行为型设计模式

行为型模式抽象了我们要对采取该操作的对象或类采取的操作。 通过更改对象或类，我们可以更改所使用的算法，受影响的对象或行为，同时仍为客户端类保留相同的基本接口。

| 设计模式名称 | 目的 |
| --- | --- |
| [责任链](//howtodoinjava.com/design-patterns/behavioral/chain-of-responsibility-design-pattern/) | 责任链设计模式通过以链的形式将接收对象链接在一起，为多个对象提供了处理请求的机会。 |
| [命令](//howtodoinjava.com/design-patterns/behavioral/command-pattern/) | 命令设计模式对于将业务逻辑抽象为离散的动作（我们称为命令）很有用。 这些命令对象有助于两个类之间的松散耦合，其中一个类（调用者）应调用另一类（接收者）上的方法来执行业务操作。 |
| 解释器 | 解释器模式指定如何以编程方式求值一种语言的句子。 它有助于为一种简单的语言建立语法，以便可以解释该语言中的句子。 |
| [迭代器](https://howtodoinjava.com/design-patterns/behavioral/iterator-design-pattern/) | 迭代器模式提供了一种在不暴露其基础表示的情况下顺序访问聚合对象的元素的方法。 |
| [中介者](https://howtodoinjava.com/design-patterns/behavioral/mediator-pattern/) | 中介者模式定义了一个对象，该对象封装了一组对象之间的交互方式。 中介者通过防止对象之间显式地相互引用来促进松散耦合，并且它使我们可以独立地更改其交互。 |
| [备忘录](https://howtodoinjava.com/design-patterns/behavioral/memento-design-pattern/) | 备忘录模式用于将对象的状态恢复到先前的状态。 也称为快照模式。 |
| [观察者](https://howtodoinjava.com/design-patterns/behavioral/observer-design-pattern/) | 观察者模式定义了对象之间的一对多依赖关系，因此当一个对象改变状态时，其所有依赖关系都会得到通知并自动更新。 它也称为发布 - 订阅模式。 |
| [状态](https://howtodoinjava.com/design-patterns/behavioral/state-design-pattern/) | 在状态模式下，对象可以在其内部状态更改时更改其行为。 该对象似乎将更改其类。 每个对象的可能状态应有一个单独的具体类。 |
| [策略](//howtodoinjava.com/design-patterns/behavioral/strategy-design-pattern/) | 当我们在运行时从算法的多个其他实现中选择特定的算法或任务实现时，将使用策略模式。 |
| [模板方法](//howtodoinjava.com/design-patterns/behavioral/template-method-pattern/) | 模板方法模式定义了执行多步算法的顺序步骤，并且还可以选择提供默认实现（基于需求）。 |
| [访问者](//howtodoinjava.com/design-patterns/behavioral/visitor-design-pattern-example-tutorial/) | 当我们希望对象的层次结构修改其行为但不修改其源代码时，将使用访问者模式。 |

学习愉快！