Gang of Four (GoF) 设计模式指的是软件工程中常见的23种设计模式,这些模式由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides在他们的经典书籍《Design Patterns: Elements of Reusable Object-Oriented Software》中提出。这23种设计模式可以根据其目的被分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)和行为型模式(Behavioral Patterns)。下面是对每种模式的简要介绍:
创建型模式(Creational Patterns)
- 单例模式(Singleton) - 确保一个类只有一个实例,并提供一个全局访问点。
- 抽象工厂模式(Abstract Factory) - 提供一个接口,用于创建相关或依赖对象的家族,而无需明确指定具体类。
- 工厂方法模式(Factory Method) - 定义一个用于创建对象的接口,但让子类决定实例化哪一个类。
- 建造者模式(Builder) - 分离复杂对象的构建过程与表示,使得同样的构建过程可以创建不同的表示。
- 原型模式(Prototype) - 通过复制现有实例来创建新实例,而不是通过实例化。
结构型模式(Structural Patterns)
- 适配器模式(Adapter) - 允许不兼容接口的对象互相合作。也被称为包装器(Wrapper)。
- 桥接模式(Bridge) - 将抽象部分与其实现部分分离,使它们都可以独立地变化。
- 组合模式(Composite) - 将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
- 装饰模式(Decorator) - 动态给对象添加功能,比生成子类更加灵活。
- 外观模式(Facade) - 为子系统中的一组接口提供一个统一的界面,简化接口。
- 享元模式(Flyweight) - 运用共享技术有效地支持大量细粒度的对象。
- 代理模式(Proxy) - 为其他对象提供一种代理以控制对这个对象的访问。
行为型模式(Behavioral Patterns)
- 责任链模式(Chain of Responsibility) - 避免请求发送者与接收者耦合,将多个对象都有机会处理请求连成一条链,并沿着这条链传递请求直到有一个对象处理它为止。
- 命令模式(Command) - 将请求封装成对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
- 解释器模式(Interpreter) - 给定一种语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
- 迭代器模式(Iterator) - 提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。
- 中介者模式(Mediator) - 用一个中介对象封装一系列的对象交互,从而使各对象不需要显式地相互引用,从而使其耦合松散,并且可以独立地改变它们之间的交互。
- 备忘录模式(Memento) - 在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。
- 观察者模式(Observer) - 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象发生变化时,它的所有依赖者都会收到通知并自动更新。
- 状态模式(State) - 允许对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
- 策略模式(Strategy) - 定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法独立于使用它的客户而变化。
- 模板方法模式(Template Method) - 定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
- 访问者模式(Visitor) - 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。