【导语】:设计模式是一套被重复应用、少数人通晓的、通过分类编目标、代码设计教训的总结。应用设计模式是为了可重用代码、让代码更容易地被别人了解、保障代码可靠性。python-patterns
则是应用 python 实现设计模式的汇合。
简介
学会了很多门编程语言,就是一个好程序员了吗?事实上,入门很简略,但真正的精通不仅须要会写出简略的相似“Hello World”的程序,还须要纯熟利用,并解决各种问题。在精通的路线上,设计模式是咱们肯定会接触并须要把握的一个常识。
设计模式是软件开发人员在软件开发过程中面临的个别问题的解决方案,这些解决方案是泛滥软件开发人员通过相当长的一段时间和谬误总结进去的,它是软件工程的基石,如同大厦的一块块砖石一样。
目前市面上,咱们买到的设计模式的书,根本是用 Java 语言实现的,对于 Python 语言的用户不是很敌对,而 python-patterns
恰好填补了这个空白。
这个开源我的项目的地址是:https://github.com/faif/pytho…
怪兽试用了本人常常用的策略设计模式,repo 里的代码很简洁,略微改改就能够利用到本人的我的项目里,非常好用。
反对的设计模式
创立型模式
- 形象工厂模式(abstract_factory)
- 单例模式(brog)
- 建造者模式(builder)
- 工厂模式(factory)
- 惰性评估模式(lazy_evaluation)
- 对象池模式(pool)
- 原型模式(prototype)
结构型模式
- 3 层模式(3-tier)
- 适配器模式(adapter)
- 桥接模式(bridge)
- 组合模式(composite)
- 装璜器模式(decorator)
- 外观模式(facade)
- 享元模式(flyweight)
- 前端控制器模式(front_controller)
- MVC 模式(mvc)
- 代理模式(proxy)
行为型模式
- 责任链模式(chain_of_responsibility)
- 目录模式(catelog)
- 办法链模式(chaining_method)
- 命令模式(command)
- 迭代器模式(iterator)
- 中介者模式(mediator)
- 备忘录模式(memento)
- 观察者模式(observer)
- 公布订阅模式(publish_subscribe)
- 注册模式(registry)
- 规格模式(specification)
- 状态模式(state)
- 策略模式(strategy)
- 模板模式(template)
- 访问者模式(visitor)
可测试型模式
- 依赖注入模式(dependency_injection)
根底模式
- 委托模式(delegation_pattern)
其余模式
- 黑板模式(blackboard)
- 图搜寻模式(graph_search)
- hsm 模式(hsm)
策略模式举例
在这里怪兽试用了 python-patterns
里的策略模式示例。
策略模式定义了一组算法,将每个算法都封装起来,并使他们之间能够相互替换。策略模式使得每个算法和调用他们的实体彼此独立,缩小了代码的冗余。个别当算法策略须要常常被替换时,能够思考策略模式。比方上面在电商场景里会常常碰到的订单价格计算的例子,计算价格时会用到满减、打折、优惠券等形式。
class Order:
def __init__(self, price, discount_strategy=None):
self.price = price
self.discount_strategy = discount_strategy
def price_after_discount(self):
if self.discount_strategy:
discount = self.discount_strategy(self)
else:
discount = 0
return self.price - discount
def __repr__(self):
fmt = "<Price: {}, price after discount: {}>"
return fmt.format(self.price, self.price_after_discount())
def ten_percent_discount(order):
return order.price * 0.10
def on_sale_discount(order):
return order.price * 0.25 + 20
在应用策略模式后,可按如下形式,在计算订单价格时,动静的抉择须要应用的价格计算策略。
def main():
"""
>>> Order(100)
<Price: 100, price after discount: 100>
>>> Order(100, discount_strategy=ten_percent_discount)
<Price: 100, price after discount: 90.0>
>>> Order(1000, discount_strategy=on_sale_discount)
<Price: 1000, price after discount: 730.0>
"""if __name__ =="__main__":
import doctest
doctest.testmod()
其余设计模式内容,请参见:
https://github.com/faif/pytho…
开源前哨
日常分享热门、乏味和实用的开源我的项目。参加保护 10 万 + Star 的开源技术资源库,包含:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。