news 2026/7/5 4:56:53

python-patterns:Python 设计模式集合,42k+ Star

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python-patterns:Python 设计模式集合,42k+ Star

文章目录

  • python-patterns:Python 设计模式集合,42k+ Star

python-patterns:Python 设计模式集合,42k+ Star

GitHub 上有一个仓库,把常见的设计模式用 Python 重新实现了一遍,收获了 42k+ 的 Star。

这个仓库叫 python-patterns,由开发者 faif 维护,收录了创建型、结构型、行为型等多种设计模式的 Python 实现。

每个模式都是独立的 Python 文件,可以直接运行和学习。

创建型模式

创建型模式关注的是对象的创建方式。仓库中收录了以下几种:

  • abstract_factory:用通用函数配合具体工厂来创建对象
  • borg:一种共享状态的单例模式,所有实例共享同一个字典
  • builder:通过构建对象逐步接收参数,最终返回构造好的对象
  • factory:将实例创建委托给专门的函数或方法
  • lazy_evaluation:Python 中的惰性求值属性模式
  • pool:预先实例化并维护一组相同类型的对象
  • prototype:使用工厂和原型克隆来创建新实例,适合实例化成本较高的场景

结构型模式

结构型模式定义了类和对象如何组合成更大的结构:

  • adapter:通过白名单将一个接口适配到另一个接口
  • bridge:在客户端和提供者之间充当中间人,降低接口变更的影响
  • composite:让客户端可以统一处理单个对象和组合对象
  • decorator:用其他功能包装功能,从而影响输出
  • facade:用一个类作为一组其他类的 API
  • flyweight:透明地复用具有相似或相同状态的现有实例
  • proxy:一个对象将操作转发给另一个对象
  • mvc:模型、视图、控制器的非严格关系模式

行为型模式

行为型模式关注对象之间的通信和职责分配:

  • chain_of_responsibility:用一连串处理器依次尝试处理数据
  • command:将命令和参数打包,稍后调用
  • iterator:遍历容器并访问其元素
  • mediator:一个对象知道如何连接其他对象并充当代理
  • memento:生成不透明令牌,用于回退到之前的状态
  • observer:为事件或数据变化提供回调通知
  • publish_subscribe:源将事件或数据分发给零个或多个注册的监听者
  • state:将逻辑组织为离散的潜在状态,以及可转换的下一状态
  • strategy:对同一数据的可选操作
  • template:对象强加一个结构,但接受可插拔的组件
  • visitor:对集合中的所有项调用回调

反模式

仓库还列出了一些在 Python 中不推荐使用的设计模式:

Singleton:Python 模块本身就是单例,每个模块只会被导入一次。显式的单例类增加了不必要的复杂度,更好的做法是使用模块级变量或依赖注入。

God Object:把太多逻辑集中在一个类里,会让代码难以测试和维护。应该把功能拆分成更小、更内聚的类。

继承过度使用:深层继承树会让代码变得脆弱。Python 社区更倾向于组合优于继承。

依赖注入和委托模式

仓库还包含了依赖注入的三种变体实现,以及委托模式的实现。委托模式中,一个对象通过委托给第二个对象来处理请求。

其他模式

除了经典的 GoF 模式,仓库还收录了一些非标准模式:

  • blackboard:一种架构模型,通过整合不同子系统的知识来构建解决方案
  • graph_search:图搜索算法的实现
  • hsm:层次状态机的实现

安装使用

克隆仓库后可以直接查看每个模式的源码:

git clone https://github.com/faif/python-patterns

每个模式文件都包含模块级的 docstring,部分文件还提供了 Python 生态中的实际应用示例。

仓库还附带了视频资源,包括 Peter Ullrich 的 Python 设计模式演讲,以及 Sebastian Buczynski 关于为什么在 Python 中不需要设计模式的讨论。

对于想要深入理解设计模式在 Python 中如何落地的开发者来说,这个仓库是一个不错的参考。每个模式都有独立的实现文件,可以单独阅读和运行,不需要依赖整个项目。

的讨论。

对于想要深入理解设计模式在 Python 中如何落地的开发者来说,这个仓库是一个不错的参考。每个模式都有独立的实现文件,可以单独阅读和运行,不需要依赖整个项目。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 4:55:43

终极指南:3步解决群晖DSM 7.2.2 Video Station不兼容问题

终极指南:3步解决群晖DSM 7.2.2 Video Station不兼容问题 【免费下载链接】Video_Station_for_DSM_722 Script to install Video Station in DSM 7.2.2 and DSM 7.3 项目地址: https://gitcode.com/gh_mirrors/vi/Video_Station_for_DSM_722 你是否正在为群晖…

作者头像 李华
网站建设 2026/7/5 4:54:54

内景 现代美术馆展厅

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 现代美术馆展厅 地址:本地PC端运行(或WebGL端部署链接&…

作者头像 李华
网站建设 2026/7/5 4:53:19

如何高效管理Zotero文献库:Zotero Format Metadata终极指南

如何高效管理Zotero文献库:Zotero Format Metadata终极指南 【免费下载链接】zotero-format-metadata Linter for Zotero. A plugin for Zotero to format item metadata. Shortcut to set title rich text; set journal abbreviations, university places, and ite…

作者头像 李华
网站建设 2026/7/5 4:50:15

5分钟掌握QRazyBox:免费开源的二维码修复与恢复终极指南

5分钟掌握QRazyBox:免费开源的二维码修复与恢复终极指南 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否遇到过重要二维码因打印模糊、表面划痕或图像损坏而无法扫描的困扰&…

作者头像 李华