设计模式:概述、OOP七大设计原则


23种设计模式

简介

设计模式(Design pattern)是对软件设计中普遍存在问题的解决方案。

这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

目的

  1. 提高思维、编程和设计能力;
  2. 使程序设计更标准化、代码编制更工程化,提高开发效率,缩短开发周期;
  3. 使代码具有更好的:重用性、可读性、可扩展性(可维护性)、可靠性、高内聚低耦合;

设计模式(GoF23)

  • 创建型
    • 单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式;
  • 结构型
    • 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
  • 行为型
    • 模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

OOP七大设计原则

设计原则

  • 设计模式的基础,即设计的依据;
  • 封装继承多态,以及类的关联关系和组合关系的充分理解。
  1. 单一职责原则
  2. 接口隔离原则
  3. 依赖倒置原则:面向接口编程,而不是面向实现编程(开闭原则的基础);
  4. 里式替换原则:继承必须确保父类(超类)的性质在子类中成立;
  5. 开闭原则:对扩展开放,对修改关闭;
  6. 迪米特法则(最少知道原则):尽量少的与其他实体时间发生相互作用,使得系统功能相对独立。(只与直接朋友交流,不跟“陌生人”交流);
  7. 合成复用原则:尽量先使用组合或聚合等关联关系,其次才考虑继承关系。

单一职责(Single Responsibility)

简介

  • 降低类的复杂度,一个类只负责一项职责;
  • 提高类的可读性、可维护性,降低变更引起的风险;
  • 分解类的粒度,高内聚低耦合;

举例:类A 负责 职责1职责2

  • 问题:当修改 职责1 的代码时,可能对 职责2 的代码造成影响;
  • 解决:将 类A 的粒度分解为A1,A2(即分为两个类)。

接口隔离(Interface Segregation)

简介

  • 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖(使用)应该建立在最小的接口上;
  • 为各个类建立它们需要的专门接口;

举例

  • 接口F:有 5 个方法(Method1,2,3,4,5),2 个实现类(FImpl1FImpl2
  • 类A:通过接口F 依赖(使用)类FImpl1 中的 3 个方法(Method1,2,3
  • 类B:通过接口F 依赖(使用)类FImpl2 中的 3 个方法(Method1,4,5
  • 问题:接口F 对于类A 和 类B 来说不是最小接口,则实现类FImpl1 和 类FImpl2 需要实现它们不需要的方法;
  • 解决:将接口F 拆分为独立的 3 个接口,类A 和 类B 分别与需要的接口建立依赖关系。

image-20211130173620192

依赖倒置(Dependence Inversion)

里式替换(Liskov Substitution)

开闭(Open Close)

迪米特(Demeter)

合成复用(Composite Reuse)