代码重构系列(三):详解面向对象六大原则

1. 单一职责原则

  • 概念:

    • 英文是 Single Responsibility Principle,简称 SRP,简单说,就是一个类只做一件事
    • 这个设计原则备受争议却又及其重要,因为单一原则的划分界限并不是很清晰,很多时候都需要个人经验来界定。所以,最大的问题就是对职责的定义,类的职责是什么,以及怎么划分类的职责。
    • 单一职责原则并不意味着一个类只能有一个方法,而是说这个类中的方法所做的工作是高度相关的,即高内聚
  • 优点:

    • 变更引起的风险降低。
    • 可读性提高,容易维护,方便扩展。
    • 类的复杂性降低,实现什么职责都有清晰明确的定义。

2. 里氏替换原则

  • 概念:

    • 里氏替换原则依赖于继承、多态两大面向语言特性。简单来说,里氏替换原则就是所有引用基类、接口的地方必须能够透明地使用其子类的对象
    • 通俗来说,只要父类能出现的地方子类就可以出现,而且替换为子类也不会产生任何错误或异常,调用方可能根本就不需要知道是父类还是子类。但是,反过来不行
    • 很多框架就是这样实现的,框架定义一系列相关的逻辑骨架与抽象,使得调用方可以将自己的实现注入到框架中,从而实现各种功能。
  • 优点:

    • 代码共享,减少了代码量。
    • 提高了代码的可扩展性。
    • 提高了代码的重用性。
  • 缺点:

    • 继承是侵入性的,只要继承,就必须拥有父类的所有属性和方法。
    • 降低了代码的灵活性,可能使子类中多了一些方法属性约束。
    • 增强了耦合性,当父类需要修改时,必须要考虑到子类。

3. 依赖倒置原则

  • 概念:

    • 高层模块不应该依赖底层模块,两者都应该依赖其抽象。抽象不应该依赖细节,而细节应该依赖抽象
    • Java 中,抽象就是指接口或抽象类,细节就是实现类。
    • 简单来说,就是面向接口编程,或者面向抽象编程
  • 优点:

    • 可扩展性好,耦合度低。
    • 可读性高,可维护性好。
    • 降低并行开发风险,稳定性高。

4. 开闭原则

  • 概念:

    • 开闭原则是面向对象编程中最基础的设计原则
    • 一个软件实体如类、模块和方法应该对扩展开放、对修改关闭
    • 当软件需要变化时,应尽量通过扩展方式实现变化,而不是通过修改已有代码的方式。
  • 优点:

    • 增加稳定性。
    • 可扩展性高。

5. 接口隔离原则

  • 概念:

    • 客户端不应该依赖它不需要的接口。
    • 一个类对另一个类的依赖应该建立在最小的接口上
    • 当一个接口太大时,需要将它分割成一些更细小的接口。
  • 优点:

    • 降低耦合性。
    • 增强可读性。
    • 隐藏实现细节。

6. 迪米特原则

  • 概念:

    • 迪米特原则也称为最少知识原则(Least Knowledge Principle
    • 一个对象应该对其他对象有最少的了解,类似于接口隔离原则中的最小接口概念。
    • 还有一个英文解释:Only talk to your immedate friends(只与直接的朋友通信)。
  • 优点:

    • 降低复杂度。
    • 降低耦合度。
    • 增加稳定性。
-------------本文结束感谢您的阅读-------------