开闭原则
定义:一个软件的实体如:类、方法应该对扩展开放,对修改关闭;在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果;用接口和抽象构建框架,用实现去实现具体的细节。
优点:增加软件系统的稳定性,提高可复用性及可维护性。
单一职责原则
定义:一个类、接口、方法只负责一个功能领域中的相应职责,核心就是控制类的粒度大小、将对象解耦、提高其内聚性。
优点:降低类的复杂度,提高类的可读性,提高系统的可维护性,变更引起的风险降低。
接口隔离原则
定义:各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。接口隔离原则注重的是对接口依赖的隔离。
优点:将臃肿庞大的接口分解为多个粒度小的接口,提高系统的灵活性和可维护性;合理定义接口的粒度大小,提高系统的稳定性;使用多个专门的接口还能够体现对象的层次。
迪米特法则
定义:一个对象应该对其他对象保持最少的了解,使得系统功能模块相对独立,又叫最少知道原则。
优点:降低类之间的耦合
强调只和朋友交流,不和陌生人说话
朋友:出现在成员变量、方法的输入、输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。
里氏替换原则
定义:任何父类可以出现的地方,子类一定可以出现,所有引用父类的地方必须能透明地使用其子类的对象,子类对象能够替换父类对象,而程序逻辑不变。
引申意义:子类可以扩展父类的功能,但不能改变父类原有的功能。
含义1:子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
含义2:子类中可以增加自己特有的方法。
含义3:当子类的方法重载父类的方法时,方法的前置条件(即方法的输入/入参)要比父类方法的输入参数更宽松。
含义4:当子类的方法实现父类的方法时(重写/重载或实现抽象方法)方法的后置条件(即方法的输出/返回值)要比父类更严格或相等。
优点:约束继承泛滥,开闭原则的一种体现;加强程序的健壮性,同时变更时也可以做到非常好的兼容性、提高程序的维护性、扩展性;降低需求变更时引入的风险。
依赖倒置原则
定义:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。其核心思想是:要面向接口编程,不要面向实现编程;使用接口或者抽象类的目的是制定好规范和契约,而不去涉及任何具体的操作,把展现细节的任务交给它们的实现类去完成。
优点:降低修改程序的频率,增加系统的稳定性,提高代码可读性和可维护性。
合成复用原则
定义:尽量使用合成/聚合,而不是通过继承达到复用的目的。
优点:降低类与类之间的藕合度,维持类的封装性,增加复用的灵活性。