当前位置: 首页 > article >正文

Python中的23种设计模式:详细分类与总结

设计模式是解决特定问题的通用方法,分为创建型模式结构型模式行为型模式三大类。以下是对每种模式的详细介绍,包括其核心思想、应用场景和优缺点。


一、创建型模式(Creational Patterns)

创建型模式关注对象的创建,旨在解耦对象的创建过程,提高灵活性和可扩展性。

1. 单例模式(Singleton)

核心思想:确保一个类只有一个实例,并提供全局访问点。
应用场景:数据库连接、配置管理器、日志记录器。
优缺点:简单高效,但在多线程环境中需注意同步。


2. 工厂模式(Factory Method)

核心思想:定义一个创建对象的接口,由子类决定具体的实例化逻辑。
应用场景:需要根据条件动态创建不同对象时。
优缺点:增强代码扩展性,但可能增加类的数量。


3. 抽象工厂模式(Abstract Factory)

核心思想:提供一个接口,用于创建一组相关或相互依赖的对象,而无需指定它们的具体类。
应用场景:需要创建一组相关对象(如跨平台UI控件)。
优缺点:提高模块独立性,但复杂性增加。


4. 生成器模式(Builder)

核心思想:将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
应用场景:构建复杂对象(如HTML文档生成、游戏场景构建)。
优缺点:灵活构建复杂对象,但实现较复杂。


5. 原型模式(Prototype)

核心思想:通过复制(克隆)现有对象来创建新对象,而不是通过类实例化。
应用场景:需要大量相似对象时(如图形编辑器中的图元复制)。
优缺点:提高对象创建效率,但需实现对象的深浅拷贝。


二、结构型模式(Structural Patterns)

结构型模式注重对象或类之间的组合关系,旨在优化系统结构的可维护性和扩展性。

6. 适配器模式(Adapter)

核心思想:将一个类的接口转换为客户端期望的接口,实现接口兼容。
应用场景:集成第三方库或遗留代码。
优缺点:增加兼容性,但可能导致系统复杂化。


7. 桥接模式(Bridge)

核心思想:分离抽象部分与实现部分,使它们可以独立变化。
应用场景:跨平台工具(如多平台图形绘制API)。
优缺点:增强灵活性,但设计复杂。


8. 组合模式(Composite)

核心思想:将对象组合成树形结构以表示“部分-整体”关系,使得客户端对单个对象和组合对象一致处理。
应用场景:文件系统、组织结构。
优缺点:简化客户端操作,但复杂度增加。


9. 装饰器模式(Decorator)

核心思想:动态地为对象添加职责,而无需修改其结构。
应用场景:功能扩展(如日志、权限检查)。
优缺点:灵活性强,但对象嵌套可能增加调试难度。


10. 外观模式(Facade)

核心思想:为子系统提供统一的接口,简化子系统的使用。
应用场景:复杂系统的简化接口(如数据库操作封装)。
优缺点:降低客户端复杂性,但可能隐藏系统细节。


11. 享元模式(Flyweight)

核心思想:通过共享减少对象内存开销,适用于大量细粒度对象。
应用场景:文字处理器中字符管理、棋盘游戏中的棋子。
优缺点:内存效率高,但需要保证对象的不可变性。


12. 代理模式(Proxy)

核心思想:为对象提供一个代理,以控制对其访问。
应用场景:远程代理、虚拟代理、安全代理。
优缺点:控制灵活性增加,但引入额外层次。


三、行为型模式(Behavioral Patterns)

行为型模式关注对象之间的职责分配和交互模式,优化系统的动态行为。

13. 模板方法模式(Template Method)

核心思想:定义算法的骨架,将具体步骤延迟到子类实现。
应用场景:数据处理流程、钩子机制。
优缺点:代码复用高,但灵活性有限。


14. 命令模式(Command)

核心思想:将请求封装为对象,从而支持请求的保存、撤销或重放。
应用场景:事务操作、撤销/重做功能。
优缺点:解耦请求与实现,但可能增加类的数量。


15. 迭代器模式(Iterator)

核心思想:提供一种顺序访问集合元素的方法,而不暴露其内部结构。
应用场景:自定义集合类遍历。
优缺点:简化集合遍历,但可能性能较低。


16. 观察者模式(Observer)

核心思想:定义一对多依赖关系,当一个对象状态改变时通知所有依赖者。
应用场景:事件通知机制(如发布-订阅模式)。
优缺点:解耦观察者与被观察者,但通知链可能复杂。


17. 中介者模式(Mediator)

核心思想:通过中介者对象封装一组对象之间的交互,降低耦合性。
应用场景:UI组件通信、消息总线系统。
优缺点:降低耦合性,但中介者可能变得复杂。


18. 备忘录模式(Memento)

核心思想:捕获对象状态并在以后恢复,保护数据完整性。
应用场景:撤销操作、游戏存档。
优缺点:提高数据安全性,但增加存储开销。


19. 解释器模式(Interpreter)

核心思想:为特定语言或表达式定义一个解释器。
应用场景:规则引擎、脚本语言解析器。
优缺点:适用于特定领域,但扩展性较差。


20. 策略模式(Strategy)

核心思想:定义一系列算法,将每种算法封装在独立类中,并使它们可以互换。
应用场景:动态选择算法(如支付方式)。
优缺点:灵活性强,但增加维护复杂性。


21. 状态模式(State)

核心思想:允许对象在内部状态改变时改变行为。
应用场景:状态机(如订单状态、角色状态)。
优缺点:状态逻辑清晰,但状态类可能增多。


22. 责任链模式(Chain of Responsibility)

核心思想:将请求沿着处理者链传递,直到某个处理者处理该请求。
应用场景:日志处理链、权限校验链。
优缺点:降低耦合性,但链路调试复杂。


23. 访问者模式(Visitor)

核心思想:将操作封装到访问者对象中,以便在不改变对象结构的前提下添加新功能。
应用场景:复杂对象结构操作(如语法树分析)。
优缺点:扩展性好,但依赖对象结构稳定。


分类汇总表

类别模式名称
创建型模式单例模式、工厂模式、抽象工厂模式、生成器模式、原型模式
结构型模式适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、代理模式
行为型模式模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、策略模式、状态模式、责任链模式、访问者模式

设计模式的选择

  • 适用场景:根据实际需求选择适当的模式,避免不必要的复杂性。
  • Python特性:利用动态特性(如装饰器、元类)可简化部分模式的实现。
  • 避免过度设计:保持代码清晰易读是设计模式的最终目的。

http://www.kler.cn/a/412256.html

相关文章:

  • 【TQ2440】02 串口连接进入u-boot
  • 实现Excel文件和其他文件导出为压缩包,并导入
  • Jmeter测试工具的安装和使用,mac版本,jmeter版本5.2.1
  • CGAL CGAL::Polygon_mesh_processing::self_intersections解析
  • 数据库编程(sqlite3)
  • PICO 获取设备号 SN码
  • 【Angular】async详解
  • MATLAB矩阵元素的修改及删除
  • Android.mk的变量有哪些
  • Js引入方式-01
  • 【C 语言】深入剖析双指针法实现字符串反转
  • Pytorch使用手册-Automatic Differentiation with torch.autograd(专题六)
  • Vue2学习记录
  • 目录 《Qt精通之路》
  • 离线状态下引入Echarts
  • 路由传参、搜索、多选框勾选、新增/编辑表单复用
  • IDEA2023版本配置项目全局编码
  • 数星星 (C++ 树状数组)
  • uni-app运行 安卓模拟器 MuMu模拟器
  • Cesium教程03_加载b3dm高度
  • faiss VS ChromaDB
  • DINO-X:一种用于开放世界目标检测与理解的统一视觉模型
  • Python 爬虫入门教程:从零构建你的第一个网络爬虫
  • 第六届国际科技创新学术交流大会暨信息技术与计算机应用学术会议(ITCA 2024)
  • Qwen2.5系列——大模型测评常用benchmark对应原始论文介绍(一)——通用任务
  • 基于 Qt 和 GStreamer 的环境中构建播放器