[学习笔记]设计模式 -Python实现

最近看了两本关于设计模式的书[大话设计模式, 人人都懂设计模式], 并学习了一些网上的资源[菜鸟教程, wklken/py-patterns], 这里做一下自己的总结。

设计模式?

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

设计模式就如同解答题的标准答案,不一定是最好的(最好的东西一定是结合当前现实环境而言的,今天最好的未必就是未来最好的), 但经过时间的磨练, 在大多数场景中有着较优的表现, 应该作为解决问题的首选方案。 所以不一定处处采取设计模式来解决问题,但是优秀的代码却应该遵循设计模式的理念(也就是面向对象设计原则)来解决实际问题。

不过不得不说对于Python这样一个灵活的语言,部分设计模式显得有些老学校。

基本原则

  • 开闭原则

    当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。

  • 里氏替换原则

    子类可以扩展父类的功能,但不能改变父类原有的功能。

  • 依赖倒置原则

    高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象

  • 单一职责原则

    一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分

  • 接口隔离原则

    一个类对另一个类的依赖应该建立在最小的接口上

  • 迪米特法则

    如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用

从分类上来看

  1. 创建形模型
  2. 结构形模型
  3. 行为形模型
    • 责任链
    • 命令
    • 解释器
    • 迭代器
    • 中介者
    • 备忘录
    • 空对象
    • 观察者
    • 状态
    • 策略
    • 模版方法
    • 访问者

相关代码

https://github.com/Endlex-net/Demo_of_design_patterns_by_python

未完待续