设计原则(SOLID–六大原则首字母缩写)
-
单一职责
应该有且仅有一个原因引起类的变更。
单一职责原则要求一个接口或一个类只能有一个原因引起变化,也就是一个接口或者类只能有一个职责,它就负责一件事情。
我们以打电话为例,电话通话的时候有 4 个过程发生:拨号、通话、回应、挂机。那我们写一个接口,在接口或方法里面包含所有的电话通话的方法。
好处:
-
类的复杂性降低,实现什么职责都有清晰明确的定义;
-
可读性高,复杂性降低,可读性自然就提高了;
-
可维护性提高,可读性提高了,那自然更容易维护了;
-
变更引起的风险降低,变更是必不可少的,如果接口的单一职责做得好,一个接口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性、维护性都有非常大的帮助。
-
-
开闭原则
对扩展开放,对修改关闭
为什么要用开闭原则?
-
开闭原则非常著名,只要是做面向对象编程的,在开发时都会提及开闭原则。
-
开闭原则是最基础的一个原则,其他5个原则都是开闭原则的具体形态,而开闭原则才是其精神领袖。
-
开闭原则提高了复用性,以及可维护性。
-
-
依赖倒置原则
-
模块间的依赖通过抽象发生,实现类之间不直接发生依赖关系,其依赖关系是通过接口或抽象类产生的;
-
接口或抽象类不依赖于实现类;
-
实现类依赖接口或抽象类。
说白了,就是“面向接口编程”
-
-
接口隔离
接口隔离原则就是客户端不应该依赖它不需要的接口,或者说类间的依赖关系应该建立在最小的接口上。
-
里氏替换原则
如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代替o2时,程序P的行为没有发生变化,那么类型S是类型T的子类型。
通俗点讲,就是只要父类能出现的地方,子类就可以出现,而且替换为子类也不会产生任何错误或异常。
- 子类必须完全实现父类的方法。
- 子类可以有自己的方法
- 覆盖或实现父类的方法时,输入参数可以被放大(如:HashMap=>Map)
- 覆盖或实现父类的方法时,输出结果可以被缩小
-
迪米特法则
迪米特法则(LoD)也叫最少知道法则:一个对象应该对其他对象有最少的了解
总结六大设计原则
-
单一职责原则:一个类或接口只承担一个职责。
-
里氏替换原则:在继承类时,务必重写(override)父类中所有的方法,尤其需要注意父类的protected方法(它们往往是让你重写的),子类尽量不要暴露自己的public方法供外界调用。
-
依赖倒置原则:高层模块不应该依赖于低层模块,而应该依赖于抽象。抽象不应依赖于细节,细节应依赖于抽象。
-
接口隔离原则:不要对外暴露没有实际意义的接口。
-
迪米特法则:尽量减少对象之间的交互,从而减小类之间的耦合。
-
开闭原则:对软件实体的改动,最好用扩展而非修改的方式。