大家好,我是木木。
今天给大家分享一个经典的 Python 库,python-patterns。
python-patterns
这是一份涵盖 GoF 23 种设计模式的 Python 实现合集,适合作为学习设计模式的入门参考资料。每种模式都有简洁的代码示例和说明,是理解面向对象设计思想的实用工具箱。
项目地址:https://github.com/faif/python-patterns官方文档:https://github.com/faif/python-patterns#readme
三大特点
覆盖全面
包含创建型、结构型、行为型三大类共 20+ 种经典设计模式,每种模式都有独立的 Python 实现文件,方便逐一学习和理解。
代码精炼
每个模式实现通常不超过 100 行,只保留核心逻辑,没有多余依赖,适合初学者快速把握模式本质,而不是陷入复杂业务。
Pythonic 风格
实现充分考虑了 Python 的语言特性,比如用 callable 替代接口、用模块实现单例,并专门标注了在 Python 中不推荐使用的模式及原因。
最佳实践
安装方式
python-patterns 不是传统意义上的可安装库,而是一组代码示例集合。直接克隆仓库即可:
gitclonehttps://github.com/faif/python-patterns.gitcdpython-patterns
Python 版本要求:Python 3.7+
观察者模式
这段代码演示如何实现观察者模式——当数据对象的状态发生变化时,所有注册的观察者会自动收到通知并做出响应。
importsyssys.path.insert(0,'/tmp/python-patterns')frompatterns.behavioral.observerimportData,HexViewer,DecimalViewerdata1=Data('Data 1')view1=DecimalViewer()view2=HexViewer()data1.attach(view1)data1.attach(view2)data1.data=10data1.data=255
策略模式
这段代码演示策略模式如何让算法在运行时动态切换——通过传入不同的折扣策略函数,实现灵活的价格计算。
importsyssys.path.insert(0,'/tmp/python-patterns')frompatterns.behavioral.strategyimportOrder,ten_percent_discount,on_sale_discountorder1=Order(100,discount_strategy=ten_percent_discount)print(f"九折价: {order1.apply_discount()}")order2=Order(100,discount_strategy=on_sale_discount)print(f"促销价: {order2.apply_discount()}")
环境与版本信息
高级功能:抽象工厂模式
抽象工厂模式提供了一种创建一系列相关对象的方式,而无需指定具体类。这段代码展示了如何用不同的工厂创建不同的宠物对象。
importsyssys.path.insert(0,'/tmp/python-patterns')frompatterns.creational.abstract_factoryimportPetShop,Dog,Catcat_shop=PetShop(Cat)pet1=cat_shop.buy_pet("小花")pet1.speak()dog_shop=PetShop(Dog)pet2=dog_shop.buy_pet("旺财")pet2.speak()
适用边界与上线检查
适用:
不适用:
- 替代成熟的设计模式框架(如依赖注入用 dependency-injector)
上线检查:
- 确认理解模式的适用场景和 trade-off,不要为了用模式而用模式
- 优先考虑 Python 原生特性(如函数式、模块级别)是否更合适
- 参考项目中"不推荐在 Python 中使用的模式"章节,避免过度设计
总结
python-patterns 是一份精炼的设计模式 Python 实现,覆盖 GoF 经典模式,代码简洁、Pythonic 风格突出。它不是生产框架,而是学习和参考工具——帮你快速理解模式本质,再结合实际项目灵活运用。推荐每个 Python 开发者通读一遍。