Python中常用的设计模式与实践分享

设计模式(Design Patterns)是在软件开发中常见问题的可复用解决方案。使用设计模式可以帮助我们创建更灵活、可维护和可复用的代码。在Python中,设计模式同样适用,并且由于Python的动态特性,某些设计模式在Python中的实现可能更为简洁。

以下是一些在Python中常用的设计模式:

  1. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。
复制代码

python复制代码

|---|-------------------------------------------------------|
| | class Singleton: |
| | _instance = None |
| | |
| | def __new__(cls): |
| | if not cls._instance: |
| | cls._instance = super(Singleton, cls).__new__(cls) |
| | return cls._instance |

  1. 工厂模式(Factory Pattern):提供一个创建对象的最佳方式。
复制代码

python复制代码

|---|------------------------------------|
| | class Shape: |
| | pass |
| | |
| | class Circle(Shape): |
| | pass |
| | |
| | class Rectangle(Shape): |
| | pass |
| | |
| | def shape_factory(shape_type): |
| | if shape_type == 'circle': |
| | return Circle() |
| | elif shape_type == 'rectangle': |
| | return Rectangle() |

  1. 观察者模式(Observer Pattern):定义了对象之间的一对多依赖关系,当一个对象改变状态,其所有依赖者都会收到通知并自动更新。在Python中,通常使用事件驱动的机制来实现。

  2. 装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责。在Python中,可以通过继承和函数装饰器来实现。

复制代码

python复制代码

|---|-------------------------------------------------------------------|
| | def my_decorator(func): |
| | def wrapper(): |
| | print("Something is happening before the function is called.") |
| | func() |
| | print("Something is happening after the function is called.") |
| | return wrapper |

  1. 策略模式(Strategy Pattern):定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户而变化。在Python中,可以用类和函数来实现。
  2. 适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而无法一起工作的类可以一起工作。在Python中,可以通过继承和函数重载来实现。
  3. 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下重定义某些步骤的具体实现。在Python中,可以用继承和多态来实现。
  4. 迭代器模式(Iterator Pattern):提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。在Python中,可以通过生成器和迭代器来实现。
  5. 职责链模式(Chain of Responsibility Pattern):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。在Python中,可以用函数调用链和异常处理机制来实现。
  6. 状态模式(State Pattern):允许一个对象在其内部状态改变时改变其行为,使得对象看起来像改变了其类。在Python中,可以用状态机和上下文管理器来实现。
  7. 备忘录模式(Memento Pattern):在不破坏封装性的前提下,捕获一个对象的内部状态并将其保存为备忘录对象,通过这个备忘录对象可以恢复对象到先前的状态。在Python中,可以用pickle模块来实现。
相关推荐
我的xiaodoujiao3 分钟前
从 0 到 1 搭建 Python 语言 Web UI自动化测试学习系列 15--二次开发--封装公共方法 3
python·学习·测试工具
爱思德学术3 分钟前
中国计算机学会(CCF)推荐学术会议-C(数据库/数据挖掘/内容检索):PAKDD 2026
大数据·机器学习·数据挖掘·知识发现
AI视觉网奇3 分钟前
pyqt 触摸屏监听
开发语言·python·pyqt
立志成为大牛的小牛11 分钟前
数据结构——十四、构造二叉树(王道408)
数据结构·笔记·学习·程序人生·考研
香菜+15 分钟前
python脚本加密之pyarmor
开发语言·python
Web3&Basketball23 分钟前
Dify实战:调试技巧深度解析
人工智能
数据知道25 分钟前
Go基础:一文掌握Go语言泛型的使用
开发语言·后端·golang·go语言
Brian Xia25 分钟前
# tchMaterial-parser 入门指南
python·ai
沃恩智慧30 分钟前
超越CNN和Transformer!Mamba结合多模态统领图像任务!
人工智能·cnn·transformer
RanceGru33 分钟前
LLM学习笔记5——本地部署ComfyUI和Wan2.1-T2V-1.3B文生视频模型
笔记·学习·stable diffusion·transformer