Life with teacher Lemon.

SOLID 原则

2020.04.27

六大原则

设计模式有六大原则,分别是:

单一职责:Single Responsibility Principle

开闭原则:Open Closed Principle

里氏替换:Liskov Substitution Principle

迪米特法则:Law of Demeter

接口隔离:Interface Segregation Principle

依赖倒置:Dependence Inversion Principle

它们的首字母联合起来就是 SOLID,结合使用这六个原则,可以使得我们的设计更加稳定、灵活、健壮。

单一职责

简称 SRP,何为单一职责,顾名思义,就是一个类或者方法只做一件事情。

若某个类或者方法承担了两个及以上的功能时,当我修改其中一个,易因为修改引发另一个原本正常的功能受到影响而出现 BUG

单一职责可以降低类的复杂度,易维护、易扩展、易复用,变更引起的风险显著降低。

开闭原则

简称 OCP,开闭原则讲究类、模块以及方法对外扩展是开放的,但对内修改则是封闭的。

简单理解起来就是将不变的部分封装起来,而变化的部分对外开放,例如抽象类和子类的关系。

开闭原则易于维护和升级,具备良好的扩展性。

里氏替换

简称 LSP,里氏替换认为任何父类出现的地方,在不改变程序正确性的前提下,可以被其子类所替换。

里氏替换原则,是对开闭原则的进一步补充,在设计的时候尽量使父类抽象化,不能使用父类进行实例化去替换子类,反代不成立。

迪米特法则

简称 LoD,迪米特法则又称为最少知识原则,简单来说就是一个类应该尽可能少的了解其他类,其初衷在于降低类之间的耦合度,减少对其他类的依赖,被依赖的对应则尽可能少的暴露方法。

过度的使用迪米特法则,会使系统中出现大量的中介类,增加系统的复杂度,降低了模块之间的通信效率。

接口隔离

简称 ISP,接口隔离原则,旨在表明类对类的依赖应该建立在最小范围的原则上。

最理想的状态下就是一个接口只有一个方法,缺点是接口的数量剧增,增加了系统的复杂度,开发效率降低。

乍看起来和单一职责有点相似,单一职责强调的是职责上的划分,一个接口包含多个对外的方法。而接口隔离原则强调尽可能的使用多个接口。

依赖倒置

简称 DIP,依赖倒置的核心是高层模块不应该依赖底层模块,两者都应该依赖其抽象,抽象不应该依赖细节,细节依赖抽象。

底层模块可以简单理解成原子逻辑,高层模块可以理解成对若干原则逻辑的组装。两者都依赖于抽象,其实就是说依赖倒置的中心思想就是面向接口编程,细节的可变性高,不利于高层模块的使用,因此封装成接口对外提供稳定的操作。由此可见,依赖倒置可以使模块之间的耦合度降低。