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

