Python模式
Python中的设计模式和习惯用法的集合
当前模式
创作模式:
图案 | 描述 |
---|---|
abstract_factory | 对特定工厂使用泛型函数 |
borg | 实例间状态共享的单例 |
builder | 生成器对象接收参数并返回构造的对象,而不是使用多个构造函数 |
factory | 委托专用函数/方法来创建实例 |
lazy_evaluation | Python中延迟计算的属性模式 |
pool | 预实例化并维护一组相同类型的实例 |
prototype | 为新实例使用原型的工厂和克隆(如果实例化成本较高) |
结构模式:
图案 | 描述 |
---|---|
3-tier | 数据<->业务逻辑<->表示分离(严格关系) |
adapter | 使用白名单使一个接口适应另一个接口 |
bridge | 客户端-提供商中间人,用于软化界面更改 |
composite | 允许客户端统一处理各个对象和组合 |
decorator | 将功能与其他功能一起包装以影响输出 |
facade | 使用一个类作为多个其他类的API |
flyweight | 透明地重用具有相似/相同状态的对象的现有实例 |
front_controller | 进入应用程序的单个处理程序请求 |
mvc | 模型<->视图<->控制器(非严格关系) |
proxy | 对象将操作传递给其他对象 |
行为模式:
图案 | 描述 |
---|---|
chain_of_responsibility | 应用一系列连续的处理程序来尝试和处理数据 |
catalog | 通用方法将根据构造参数调用不同的专用方法 |
chaining_method | 继续回调下一个对象方法 |
command | 捆绑命令和参数以供稍后调用 |
iterator | 遍历容器并访问容器的元素 |
iterator(Alt.实施。) | 遍历容器并访问容器的元素 |
mediator | 知道如何连接其他对象并充当代理的对象 |
memento | 生成可用于返回到以前状态的不透明令牌 |
observer | 提供回调以通知数据的事件/更改 |
publish_subscribe | 源将事件/数据联合到0+注册的侦听器 |
registry | 跟踪给定类的所有子类 |
specification | 通过使用布尔逻辑将业务规则链接在一起,可以重新组合业务规则 |
state | 逻辑被组织成离散数量的潜在状态和可以转换到的下一个状态 |
strategy | 对相同数据的可选操作 |
template | 对象强加了一个结构,但接受可插入的组件 |
visitor | 调用集合中所有项的回调 |
可测试性模式的设计:
图案 | 描述 |
---|---|
dependency_injection | 依赖项注入的3种变体 |
基本模式:
图案 | 描述 |
---|---|
delegation_pattern | 对象通过委托给第二个对象(委托)来处理请求 |
其他:
图案 | 描述 |
---|---|
blackboard | 架构模型,集合不同子系统知识构建解决方案,AI方法-非四人帮模式 |
graph_search | 绘图算法–非四人组模式 |
hsm | 分层状态机-非四人组模式 |
视频
Design Patterns in Python by Peter Ullrich
Sebastian Buczyński – Why you don’t need design patterns in Python?
Pluggable Libs Through Design Patterns
贡献
添加或修改实施时,请查看以下准则:
输出
具有示例模式的所有文件都具有### OUTPUT ###
部分(迁移到输出=“。”正在进行中)
跑append_output.sh
(例如./append_output.sh borg.py
)生成/更新它
文档字符串
以文档字符串的形式添加模块级描述,其中包含指向相应参考资料或其他有用信息的链接
如果您知道一些,请添加“Python生态系统中的示例”部分。它展示了如何将模式应用于现实世界的问题
facade.py有一个很好的详细描述的示例,但有时是较短的示例,如template.py就足够了
在某些情况下,带有doctest的类级文档字符串也会有所帮助(请参见adapter.py),但可读的输出部分要好得多
Python 2兼容性
要查看某些模式的Python2兼容版本,请查看legacy标签
更新自述文件
当其他工作完成后-更新自述文件的相应部分
特拉维斯CI
请跑吧tox
或tox -e ci37
在提交修补程序之前,请确保您的更改将通过CI
您还可以运行flake8
或pytest
手动命令。示例可在tox.ini
通过问题分类进行贡献
您可以对问题进行分类并提取请求,其中可能包括重现错误报告或要求提供重要信息,如版本号或重现说明。如果您想要开始对问题进行分类,一种简单的开始方法是subscribe to python-patterns on CodeTriage