面向对象的设计模式通常指由 GoF(Gang of Four)提出的 23 种经典设计模式。这些模式根据其解决问题的侧重点,主要分为以下三大类: [1]
1. 创建型模式 (Creational Patterns)
这类模式关注“如何创建对象”,旨在将对象的创建与使用分离,增加系统的灵活性。 [1, 2]
- 单例模式 (Singleton):确保一个类只有一个实例,并提供全局访问点。
- 工厂方法模式 (Factory Method):定义一个创建对象的接口,让子类决定实例化哪一个类。
- 抽象工厂模式 (Abstract Factory):创建相关或依赖对象的家族,而无需明确指定具体类。
- 建造者模式 (Builder):将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
- 原型模式 (Prototype):通过通过复制(克隆)现有的实例来创建新的实例。 [2, 3, 4]
2. 结构型模式 (Structural Patterns)
这类模式关注“类和对象的组合”,通过组合接口或定义对象组合来获得新的功能。 [1, 4]
- 适配器模式 (Adapter):将一个类的接口转换成客户希望的另一个接口。
- 装饰器模式 (Decorator):动态地给一个对象添加一些额外的职责,比生成子类更为灵活。
- 代理模式 (Proxy):为其他对象提供一种代理以控制对这个对象的访问。
- 外观模式 (Facade):为子系统中的一组接口提供一个一致的界面。
- 桥接模式 (Bridge):将抽象部分与它的实现部分分离,使它们都可以独立地变化。
- 组合模式 (Composite):将对象组合成树形结构以表示“部分-整体”的层次结构。
- 享元模式 (Flyweight):通过共享技术有效地支持大量细粒度的对象。 [2, 4]
3. 行为型模式 (Behavioral Patterns)
这类模式关注“对象之间的通信”,即对象如何交互以及如何分配职责。 [1, 4]
- 策略模式 (Strategy):定义一系列算法,把它们一个个封装起来,并使它们可相互替换。
- 观察者模式 (Observer):对象间的一对多依赖关系,当一个对象状态改变时,所有依赖者都会收到通知。
- 模板方法模式 (Template Method):在操作中定义算法的骨架,而将一些步骤延迟到子类中。
- 迭代器模式 (Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
- 责任链模式 (Chain of Responsibility):通过给多个对象处理请求的机会,减少请求发送者和接收者之间的耦合。
- 状态模式 (State):允许一个对象在其内部状态改变时改变它的行为。
- 命令模式 (Command):将请求封装成对象,从而使你可用不同的请求对客户进行参数化。
- 备忘录模式 (Memento):在不破坏封装性的前提下,捕获一个对象的内部状态并在对象之外保存。
- 中介者模式 (Mediator):用一个中介对象来封装一系列的对象交互。
- 解释器模式 (Interpreter):给定一个语言,定义它的文法的一种表示。
- 访问者模式 (Visitor):表示一个作用于某对象结构中的各元素的操作。 [2, 4, 5, 6]
[1] https://blog.csdn.net
[2] https://cloud.tencent.com
[3] https://www.cnblogs.com
[4] https://developer.aliyun.com
[5] https://zhuanlan.zhihu.com
[6] https://juejin.cn
[7] https://www.runoob.com
[8] https://refactoringguru.cn