接口隔离原则,英文缩写ISP,全称Interface Segregation Principle。服务器
原始定义:Clients should not be forced to depend upon interfaces that they don't use,还有一种定义是The dependency of one class to another one should depend on the smallest possible interface。性能
官方翻译:其一是不该该强行要求客户端依赖于它们不用的接口;其二是类之间的依赖应该创建在最小的接口上面。简单点说,客户端须要什么功能,就提供什么接口,对于客户端不须要的接口不该该强行要求其依赖;类之间的依赖应该创建在最小的接口上面,这里最小的粒度取决于单一职责原则的划分。spa
在这里提一下单一职责和接口隔离原则的区别。首先两个侧重点是不同的,单一职责要求类和接口,或者方法的职责单一,侧重点在职责,这是根据业务逻辑进行划分的。翻译
而接口隔离原则在此前的基础上接口中的方法尽可能少。好比,一个接口或者一个中有十个方法,不一样的方法作不一样的事情,可是这个接口职责上整体就是处理一件事情,而后具体细分红了10个方法。不一样的模块根据不一样的权限进行访问,这是符单一职责原则的。设计
可是按照接口隔离的原则是要求接口接口中的方法尽可能少,落实到这个实例就是要求尽可能多几个专门的接口供不一样的模块使用,而不是只有一个臃肿的接口,依据权限去限制不一样模块能够访问的方法。接口
举一个图书管理系统的例子,有一个查询接口BookSearch,包括以下方法:searchById,searchByBookName,searchByCategory,complexSearch,其中前三个方法是提供给学生使用的,后一个方法是提供给管理员使用的,学生对这个方法的访问是有限制的,调用不会返回任何值。当这四个方法所有公布出去以后,学生对此方法的访问即便不返回任何值也会使服务器性能降低。ip
所以合理的设计应该是拆分这个接口为两个接口:SimpleSearch和AdminSearch。ci
SimpleSearch接口提供searchById,searchByBookName,searchByCategory方法,io
AdminSearch接口提供complexSearch方法,class
此时学生实现SimpleSearch接口便可,管理员同时实现SimpleSearch和AdminSearch两个接口。