1、什么是设计模式

  • ChristopherAlexander:”每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样你就能一次又一次地使用该方案而不必做重复劳动。”
  • 每一个设计模式系统地命名、解释和评价了面向对象系统中一个重要的和重复出现的设计。
  • GoF(GangofFour)
  • 设计模式四个基本要素:模式名称、问题、解决方案、效果

    2、讲述设计模式之前

  1. 对象/类
    1. 封装
    2. 继承
    3. 多态
  2. 接口:一种特殊的类,声明了若干方法,要求继承该接口的类必须实现这些方法
    1. 作用:限制继承接口的类的方法名称及调用方式;隐藏了类的内部实现。
    2. 接口就是一种抽象的基类(父类),限制继承它的类必须实现接口中定义的某些方法。

      3、python中接口的两种写法

      ```python

      1. 第1种写法

      class Interface: def method(self, arg): raise NotImplementedError

2. 第2种写法

from abc import abstractmethod, ABCMeta class Interface(metaclass=ABCMeta): @abstractmethod def method(self, arg): pass ```

4、设计模式六大原则

  • 开闭原则:一个软件实体,如类、模块和函数应该对扩展开发,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
  • 里氏(Liskow)替换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象。
  • 依赖倒置原则:高层模块不应该依赖底层模块,而且都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。换言之,要针对接口变成,而不是针对实现编程。
  • 接口隔离原则:使用对个专门的接口,而不使用单一的总接口,即客户端不应该依赖哪些它不需要的接口。
  • 迪米特法法则:一个软件实体应当尽可能少地与其他实体发生相互作用。
  • 单一职责原则:不要存在多余一个倒置类变更的原因。通俗的说,即一个类只负责一项职责。

    5、设计模式分类

    |

创建型模式 |


对象实例化的模式,创建型模式用于解耦对象的实例化过程 | 工厂方法模式 | | —- | —- | —- | | | | 抽象工厂模式 | | | | 建设者模式 | | | | 原型模式 | | | | 单例模式 | |

结构性模式 |




把类或对象结合在一起形成一个更大的结构 | 适配器模式 | | | | 桥模式 | | | | 组合模式 | | | | 装饰模式 | | | | 外观模式 | | | | 享元模式 | | | | 代理模式 | |

行为模式 |





类和对象如何交互,及划分责任和算法 | 解释器模式 | | | | 责任链模式 | | | | 命令模式 | | | | 迭代器模式 | | | | 中介者模式 | | | | 备忘录模式 | | | | 观察者模式 | | | | 状态模式 | | | | 策略模式 | | | | 访问者模式 | | | | 模板方法模式 |