设计模式的分类与原则
在上一章,我们弄清楚了什么是设计模式以及为什么 Python 也需要设计模式。
本篇我们进一步梳理设计模式的整体结构,让你对设计模式体系有一个全局认知。
一、设计模式的三大分类
经典的 GoF(Gang of Four)设计模式将模式分为三大类:创建型、结构型、行为型。这是理解设计模式体系最重要的基础。
1. 创建型模式(Creational Patterns)
关注点:如何更合理地创建对象。
主要解决的问题:
- 复杂对象如何创建?
- 如何避免在代码中散落大量
new或类()实例化? - 如何做到可扩展、可替换?
常见创建型模式:
| 模式 | 作用 |
|---|---|
| 单例模式 (Singleton) | 保证一个类只有一个实例 |
| 工厂方法 (Factory Method) | 延迟创建对象,让子类决定实例化谁 |
| 抽象工厂 (Abstract Factory) | 创建一系列相关对象,隔离具体实现 |
| 建造者模式 (Builder) | 分步骤创建复杂对象 |
| 原型模式 (Prototype) | 通过复制已有对象来创建新对象 |
Python 的动态语言特性,使得这些模式的实现更加灵活,但思想完全一致。
2. 结构型模式(Structural Patterns)
关注点:如何组织类与对象,使结构更稳定、更灵活。
主要解决的问题:
- 如何让类之间的关系更加清晰、可复用?
- 如何简化复杂系统的外部使用方式?
常见结构型模式:
| 模式 | 作用 |
|---|---|
| 适配器模式 (Adapter) | 转换接口,让不兼容的组件协作 |
| 装饰器模式 (Decorator) | 动态扩展对象功能 |
| 代理模式 (Proxy) | 控制对象访问,如缓存、权限、延迟加载 |
| 外观模式 (Facade) | 提供统一的高层接口封装复杂系统 |
| 组合模式 (Composite) | 构建树形结构,使单个对象和组合对象统一处理 |
| 桥接模式 (Bridge) | 分离抽象与实现,让两者独立变化 |
| 享元模式 (Flyweight) | 共享对象节省内存 |
其中装饰器模式在 Python 中非常高频,因为 Python 原生支持函数装饰器。
3. 行为型模式(Behavioral Patterns)
关注点:对象之间如何协作与通信。
主要解决的问题:
- 如何减少对象之间复杂的耦合?
- 如何让行为可以灵活替换、组合或扩展?
常见行为型模式:
| 模式 | 作用 |
|---|---|
| 策略模式 (Strategy) | 把不同算法封装成独立类,支持动态替换 |
| 观察者模式 (Observer) | 事件通知机制(发布-订阅) |
| 状态模式 (State) | 用对象管理状态转换,避免大量 if-else |
| 责任链模式 (Chain of Responsibility) | 请求沿链条传递,直至被处理 |
| 命令模式 (Command) | 将操作封装成对象,支持撤销与重做 |
| 迭代器模式 (Iterator) | 统一遍历集合的方式 |
| 模板方法 (Template Method) | 定义算法骨架,子类填空实现 |
| 访问者模式 (Visitor) | 分离算法与对象结构的关系 |
| 中介者模式 (Mediator) | 统一处理对象间通信,减少耦合 |
| 解释器模式 (Interpreter) | 构建简单语言解释器 |
