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?

You Don’t Need That!

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

请跑吧toxtox -e ci37在提交修补程序之前,请确保您的更改将通过CI

您还可以运行flake8pytest手动命令。示例可在tox.ini

通过问题分类进行贡献Open Source Helpers

您可以对问题进行分类并提取请求,其中可能包括重现错误报告或要求提供重要信息,如版本号或重现说明。如果您想要开始对问题进行分类,一种简单的开始方法是subscribe to python-patterns on CodeTriage

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。