接口隔离原则定义
接口隔离原则,英文名为Interface Segregation Principe,又称为ISP原则。
接口隔离原则的定义,主要分为如下2点:
- 客户端不应该依赖它不需要的接口;
- 一个类对另一个类的依赖,应该建立在最小的接口上。
接口隔离原则要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口。
通俗的来讲,接口隔离原则:不要在一个接口里面定义过多的方法,接口应该最细化。
接口隔离原则的作用
1)灵活性,可维护性增强
可以提高代码的灵活性,就好比搭积木一样,可以将一个大的接口拆成多个小接口,不同的小接口可以有多种组合。
2)高内聚,低耦合
提高类的内聚性、降低它们之间的耦合性,体现了封装的思想。
3)减少代码冗余
当一个接口的方法过多往往会造成使用该接口的类中闲置一些方法,造成代码的冗余,通过细分接口可有效避免该现象。
4)避免接口污染
过于臃肿的接口设计是对接口的污染,所谓的接口污染就是为接口添加不必要的职责。
如果开发人员在接口中增加一个新功能的目的只是减少接口实现类的数目,则此设计将导致接口被不断地“污染”并“变胖”。
接口隔离原则举例
举例来说明接口隔离原则,我们来先看一个不遵循接口隔离原则的示例,有什么问题?
如下图所示:
- 上图中类A依赖接口I中的方法1、方法2、方法3,类B是对类A依赖的实现;
- 类C依赖接口I中的方法1、方法4、方法5;
- 类D是对类C依赖的实现;
- 对于类B和类D来说,虽然他们都存在着用不到的方法,也就是图中红色字体标记的方法。
- 但由于实现了接口I,所以也必须要实现这些用不到的方法。
可以看到,如果接口过于臃肿,只要接口中出现的方法,不管对依赖于它的类有没有用处,实现类中都必须去实现这些方法。
这显然不是好的设计,如果将这个设计修改为符合接口隔离原则,就必须对接口I进行拆分,在这里我们将原有的接口I拆分为三个接口。
拆分后的设计如图下图所示:
这样就将一个庞大的接口I变更为3个专用的接口:接口I1、接口I2、接口I3,所采用的正是接口隔离原则。
我们通过接口隔离原则的改造,建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少,从而达到高内聚,低耦合、可维护性强。
说到这里,很多人会觉的接口隔离原则跟之前的单一职责原则很相似,其实不然,下面简短谈谈两者的区别。
接口隔离原则与单一职责原则的区别
但两者是不同的,主要就是2点:
- 单一职责原则主要是约束类,它针对的是程序中的实现和细节;
- 接口隔离原则主要约束接口,主要针对抽象和程序整体框架的构建。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》