①单一职责原则
定义:不要存在多于一个导致类变更的原因。简单说,即一个类负责一项职责。
优点:
可以降低类的复杂度;
提高类的可读性,提高系统的可维护性;
由于软件开发不可避免会出现式样变更,遵循这一职责可以降低变更引起的风险,当修改一个功能时,可以显著降低对其他功能的影响。
注意:单一职责原则不只是面向对象编程思想所特有的,只要是模块化的程序设计,都适用单一职责原则。
②里氏替换原则
定义1:如果对每一个类型为 T1的对象 o1,都有类型为 T2 的对象o2,使得以 T1定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。
定义2:所有引用基类的地方必须能透明地使用其子类的对象。
简单说,子类可以扩展父类的功能,但不能改变父类原有的功能。体现在以下4个方面:
子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
子类中可以添加自己特有的方法。
当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类要严格。
③依赖倒置原则
定义:高层模块不应该依赖底层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
依赖倒置原则的核心思想是面向接口编程。
传递依赖的方法有三种:接口传递、构造方法传递、setter方法传递
遵循依赖倒置原则应做到的3点:
低层模块尽量都要有抽象类或接口,或两者都有;
变量的声明类型尽量是抽象类或接口;
使用继承是应遵循里氏替换原则。
④接口隔离原则
定义:客户端不应该依赖它不需要的接口,一个类对另外一个类的依赖应该建立在最小的接口上。
⇩
接口隔离原则的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量的少。
在程序设计中,依赖几个专用的接口要比依赖一个综合的接口要更灵活。
接口是设计是对外部设定的“契约”,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可扩展性。
接口隔离原则与单一职责原则:
单一职责原则注重的是职责;接口隔离原则注重的是对接口依赖的隔离。
单一职责原则主要是约束类,其次才是接口和方法,它针对的是程序中的实现和细节;接口隔离原则主要约束接口,主要针对抽象,针对程序整体框架的构建。
使用接口隔离原则的注意点:
接口尽量的小,但一定要适度。
为依赖接口的类定制服务,只暴露给调用的类它需要的方法,不需要的方法则隐藏起来。
提高内聚,减少对外交互。
⑤迪米特法则
定义:一个对象应该对其他对象保持最少的了解。
低耦合的体现。
迪米特法则的初衷是降低类之间的耦合,由于每个类都减少了不必要的依赖,但要适度使用,过分的使用迪米特原则,会产生大量的中介和传递类,导致系统复杂度变大。
⑥开闭原则
定义:一个软件实体,如类、模块、函数应该对扩展开放,对修改关闭。
可以这样理解:用抽象构建框架,用实现扩展细节。
------分割线-----
六大原则总结:
单一职责原则,告诉我们实现类要职责单一;
里氏替换原则,告诉我们不要破坏继承体系;
依赖倒置原则,告诉我们要面向接口编程;
接口隔离原则,告诉我们在设计接口的时候要精简单一;
迪米特法则,告诉我们要降低耦合;
开闭原则是总纲,告诉我们要对扩展开放,对修改关闭。