> 文章列表 > 【一篇就够】【设计模式六大原则】

【一篇就够】【设计模式六大原则】

【一篇就够】【设计模式六大原则】

目录

    • 单一职责
      • 定义
      • 详细描述
    • 里氏替换原则(Liskov Substitution Principle LSP)
      • 定义
      • 详细描述
      • 优点
      • 缺点
    • 依赖倒置原则(Dependence Inversion Principle, DIP)
      • 定义
      • 优点
    • 接口隔离原则
      • 定义
      • 详细描述
    • 迪米特法则(Low of Demeter ,LoD)又称最少知识原则
      • 定义
      • 详细描述
    • 开闭原则
      • 定义
      • 详细描述

单一职责

定义

应该有且仅有一个原因引起类的变更。

详细描述

接口的职责在设计时应该做到单一,降低类的复杂性,实现的职责都有明确的定义,提高了可读性、可维护性、可扩展性;
变更引起的风险降低,如果接口隔离性做的好,一个接口的修改只对相应实现类有影响,对其它接口没有影响,降低了耦合性。
(单一职责提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计的是否优良,但是“职责”或“变化原因”都是不可度量的,因项目而异,因环境而异)

里氏替换原则(Liskov Substitution Principle LSP)

定义

是面向对象设计的基本原则之一,只要父类能出现的地方子类就能出现,而且替换为子类也不会产生任何错误或异常。

详细描述

LSP原则是继承复用的基石,只有当子类能够替换掉父类,软件单位功能不受影响时,父类才能被真正复用。LSP原则是对开闭原则的补充,实现开闭原则的关键步骤就是抽象化,而父类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

  1. 子类必须完全实现父类的方法
  2. 子类可以有自己的个性
  3. 子类可以有自己的个性
  4. 子类可以有自己的个性

优点

  1. 代码共享,减少创建类的工作量
  2. 提高代码的重用性
  3. 子类可以形似父类,但又异于父类
  4. 提高代码的可扩展性
  5. 提高产品或项目的开放性

缺点

  1. 继承是侵入性的,只要继承就必须拥有父类的所有属性和方法
  2. 降低代码的灵活性
  3. 增强了耦合性,父类的常量、变量、方法被修改时,要考虑到子类的修改,在缺乏规范的环境下,可能有许多代码需要重构。

依赖倒置原则(Dependence Inversion Principle, DIP)

定义

高层模块不应该依赖低层模块,两者都应该依赖其抽象,抽象不应该依赖细节,细节应该依赖抽象
面向接口编程(Object-Oriented Design, OOD)

优点

  1. 依赖倒置原则可以降低类间的耦合性;
  2. 依赖倒置原则可以提高系统的稳定性;
  3. 依赖倒置原则可以减少并行开发引起的风险;
  4. 依赖倒置原则可以提高代码的可读性和可维护性;

接口隔离原则

定义

使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。

详细描述

接口仅仅提供客户端需要的行为,客户端不需要的行为则隐藏起来,应当为客户端提供尽可能小的接口,而不要提供大的总接口

迪米特法则(Low of Demeter ,LoD)又称最少知识原则

定义

一个软件实体应当尽可能少的与其他实体发生相互作用。

详细描述

应该尽量减少对象之间的交互,如果两个对象不必直接通信,那么这两个对象就不应该发生任何直接的相互作用,如果其中一个对象需要调用另外一个对象的某个方法时,可以通过第三者转发这个调用。就是通过引入一个合理的第三者来降低先有对象之间的耦合度。

开闭原则

定义

对扩展开放,对修改关闭

详细描述

  1. 开闭原则(Open Closed Principle)是编程中最基础、最重要设计原则
  2. 一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。
  3. 一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。
  4. 编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则。

情感知识