接口隔离原则
定义
Interface Segregation Principle
指明客户端不应被迫使用对其而言无用的方法或功能。
拆分非常庞大臃肿的接口成为更小的和更具体的接口,这样客户端将会只需要知道他们感兴趣的方法。
目的是系统解开耦合,从而容易重构,更改和重新部署。
客户端:可以理解为接口的调用者或者使用者
理解接口隔离原则的关键,就是理解接口的含义,在这个原则中,我们可以把接口理解为:
- 一组API接口
- 单个API接口或者函数
- 如JAVA语言中的Interface
当我们把接口理解为一组API时,如果部分接口或者部分功能被客户端使用,那么我们就需要将这部分的接口隔离出来,单独给客户端使用。
当我们把接口理解为单个API或者函数,如果函数中部分功能,能被客户端调用,那么我们就需要单独把这部分功能封装成函数给调用者使用。
当我们把接口理解为JAVA语言中的interface,我们的interface设计尽量要单一,不要让接口的实现类和调用者,依赖不需要的接口函数。
简单来说,作为程序设计师在设计接口时,尽量缩小接口的范围,使得客户端的类不必实现其不需要的行为,不应该强迫客户端程序依赖
它们不用的方法。接口应该具备小而完备的行为。
根据接口隔离原则,你必须将"臃肿"的方法拆分为多个颗粒度更小的具体方法,客户端必须仅实现其实际需要的方法。否则,对于"臃肿"的接口
修改可能会导致程序出错,即使客户端根本没有使用修改后的方法。在JAVA这门面向对象语言中,一个类只能单继承,可以多实现。因此我们
没有必要将大量无关的行为塞到一个接口中,可以进行拆分为更精细的接口。
从定义来看接口隔离原则与单一职责原则的区别
单一职责原则针对的是模块、类、接口的设计。
接口隔离的原则相对于单一职责原则,一方面更侧重于接口的最小化设计,另一方面更侧重于接口使用的精确性
接口隔离原则提供了一种判断接口职责是否单一的标准:通过调用者如何使用接口来间接判定,如果调用者只使用了部分接口或接口的部分功能
那么接口设计的就不够职责单一
实战分析
下面我们以学生成绩管理程序介绍接口隔离原则
【例1】学生成绩管理程序
分析:学生成绩管理程序一般包含插入成绩、删除成绩、修改成绩、计算总分、计算均分、打印成绩信息、査询成绩信息等功能,
如果将这些功能