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模块来实现。
相关推荐
学不会lostfound几秒前
三、计算机视觉_08YOLO目标检测
人工智能·深度学习·yolo·计算机视觉·检测任务
巴依老爷coder2 分钟前
YOLOX的正负样本分配问题
人工智能·yolo·计算机视觉·目标跟踪
没有不重的名么3 分钟前
DETR:End-to-End Object Detection with Transformers
人工智能·目标检测·计算机视觉
goomind5 分钟前
YOLOv8实战无人机视角目标检测
人工智能·yolo·目标检测·计算机视觉·无人机·pyqt5·无人机目标检测
算家云7 分钟前
一键生成唯美动漫图:ComfyUI-tPonynai详细搭建教程
人工智能·aigc·模型搭建·算家云·算力租赁·tponynai·动漫图生成
chenchihwen10 分钟前
大型语言模型LLM - Finetuning vs Prompting
人工智能·语言模型·自然语言处理
cdut_suye11 分钟前
C++11新特性探索:Lambda表达式与函数包装器的实用指南
开发语言·数据库·c++·人工智能·python·机器学习·华为
weixin_5436628612 分钟前
BERT的中文问答系统36-1
人工智能·python·bert
L_cl12 分钟前
NLP 1、人工智能与NLP简介
人工智能·自然语言处理
weixin_4314708614 分钟前
人名分类器(nlp)
人工智能·pytorch·python·深度学习·自然语言处理