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模块来实现。
相关推荐
AllData公司负责人2 小时前
AI大模型数据开发底座系列说明书,AllData集成Chat2DB开源项目建设AI 数据库分析底座,涵盖AI 洞察/对话SQL/智能视图!
数据库·人工智能·sql·开源·ai 洞察·对话sql
泯泷3 小时前
让 Agent 分清“马上办、等一等、顺手办”
人工智能·llm·agent
真上帝的左手3 小时前
30. 技术专题-‌应用框架组件-分布式架构
分布式·架构·系统架构·分布式架构
鲜于言悠9054 小时前
Claude Fable 5.2 登场,专治复杂推理与长任务
人工智能
大可不必了4 小时前
03 函数定义和调用
开发语言·python
I_belong_to_jesus4 小时前
C++关于分支预测的优化1
开发语言·c++·算法
联犀5 小时前
如何工程化降低语音交互AI设备的延迟(小智ai,芙崽这样的ai设备)
人工智能
杉岩数据5 小时前
杉岩数据董事长陈坚:从数据存储到行业智能——杉岩的AI时代战略布局
人工智能
冬奇Lab5 小时前
Loop 工程到底是高深的新技术,还是炒冷饭?用训练一个识别狗的模型讲明白
人工智能
冬奇Lab5 小时前
一天一个开源项目(第260篇):Plannotator —— 给 AI 编码 Agent 配一块「可批注的审阅台」,计划和代码改动都能在浏览器里逐条批示
人工智能·开源·claude