python patterns
1.0.0
Python 中的设计模式和习惯用法的集合。
请记住,每种模式都有其自身的权衡。您需要更多地关注为什么选择某种模式,而不是如何实现它。
创作模式:
图案 | 描述 |
---|---|
抽象工厂 | 对特定工厂使用通用函数 |
博格 | 实例之间具有共享状态的单例 |
建设者 | 构建器对象不使用多个构造函数,而是接收参数并返回构造对象 |
工厂 | 委托专门的函数/方法来创建实例 |
惰性评估 | Python 中的延迟评估属性模式 |
水池 | 预实例化并维护一组相同类型的实例 |
原型 | 使用工厂和原型的克隆来创建新实例(如果实例化成本昂贵) |
结构模式:
图案 | 描述 |
---|---|
三层 | 数据<->业务逻辑<->表示分离(严格关系) |
适配器 | 使用白名单使一个接口适应另一个接口 |
桥 | 客户端-提供商中间人,以软化界面更改 |
合成的 | 让客户统一对待单个对象和组合 |
装饰者 | 将功能与其他功能包装在一起以影响输出 |
正面 | 使用一个类作为许多其他类的 API |
蝇量级 | 透明地重用具有相似/相同状态的对象的现有实例 |
前端控制器 | 传入应用程序的单个处理程序请求 |
管理控制台 | 模型<->视图<->控制器(非严格关系) |
代理人 | 对象将操作集中到其他对象 |
行为模式:
图案 | 描述 |
---|---|
责任链 | 应用一系列连续的处理程序来尝试处理数据 |
目录 | 通用方法将根据构造参数调用不同的专用方法 |
链接方法 | continue 回调下一个对象方法 |
命令 | 捆绑命令和参数以供稍后调用 |
迭代器 | 遍历容器并访问容器的元素 |
迭代器(替代实现) | 遍历容器并访问容器的元素 |
调解人 | 知道如何连接其他对象并充当代理的对象 |
纪念 | 生成一个不透明的令牌,可用于返回到之前的状态 |
观察者 | 提供事件/数据更改通知的回调 |
发布_订阅 | 源将事件/数据联合到 0+ 个注册监听器 |
注册表 | 跟踪给定类的所有子类 |
规格 | 可以通过使用布尔逻辑将业务规则链接在一起来重新组合业务规则 |
状态 | 逻辑被组织成离散数量的潜在状态和可以转换到的下一个状态 |
战略 | 对相同数据的可选择操作 |
模板 | 对象强加了一种结构,但采用可插入组件 |
游客 | 对集合中的所有项目调用回调 |
可测试性模式设计:
图案 | 描述 |
---|---|
依赖注入 | 依赖注入的 3 种变体 |
基本模式:
图案 | 描述 |
---|---|
委托模式 | 一个对象通过委托给第二个对象(委托)来处理请求 |
其他的:
图案 | 描述 |
---|---|
黑板 | 架构模型,组装不同的子系统知识来构建解决方案,AI方法-非四帮模式 |
图搜索 | 绘图算法 - 非四组模式 |
HSM | 分层状态机 - 非四组模式 |
Python 中的设计模式作者:Peter Ullrich
Sebastian Buczyński - 为什么不需要 Python 中的设计模式?
你不需要那个!
通过设计模式的可插入库
添加或修改实施时,请查看以下准则:
以文档字符串的形式添加模块级别描述,并包含指向相应参考或其他有用信息的链接。
如果您了解一些,请添加“Python 生态系统中的示例”部分。它展示了如何将模式应用于现实世界的问题。
facade.py 有一个很好的详细描述示例,但有时 template.py 中较短的示例就足够了。
要查看某些模式的 Python 2 兼容版本,请查看旧版标签。
当其他一切完成后 - 更新自述文件的相应部分。
请在提交补丁之前运行以下命令
black .
这会检查您的代码。然后:
tox
或tox -e ci37
这将运行单元测试。有关详细信息,请参阅 tox.ini。./lint.sh
该脚本将 lint 并测试您的代码。该脚本反映了 CI 管道操作。您还可以手动运行flake8
或pytest
命令。示例可以在tox.ini
中找到。
您可以对问题和拉取请求进行分类,其中可能包括复制错误报告或询问重要信息,例如版本号或复制说明。如果您想开始对问题进行分类,一种简单的入门方法是在 CodeTriage 上订阅 python-patterns。
Mutable.ai 的人员构建了一个具有代码库感知能力的人工智能助手。尝试一下