设计模式之接口隔离原则

接口隔离原则,英文缩写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。

官方翻译:其一是不应该强行要求客户端依赖于它们不用的接口;其二是类之间的依赖应该建立在最小的接口上面。简单点说,客户端需要什么功能,就提供什么接口,对于客户端不需要的接口不应该强行要求其依赖;类之间的依赖应该建立在最小的接口上面,这里最小的粒度取决于单一职责原则的划分。

在这里提一下单一职责和接口隔离原则的区别。首先两个侧重点是不一样的,单一职责要求类和接口,或者方法的职责单一,侧重点在职责,这是根据业务逻辑进行划分的。

而接口隔离原则在此前的基础上接口中的方法尽量少。比如,一个接口或者一个中有十个方法,不同的方法做不同的事情,但是这个接口职责上总体就是处理一件事情,然后具体细分成了10个方法。不同的模块根据不同的权限进行访问,这是符单一职责原则的。

但是按照接口隔离的原则是要求接口接口中的方法尽量少,落实到这个实例就是要求尽量多几个专门的接口供不同的模块使用,而不是只有一个臃肿的接口,依据权限去限制不同模块可以访问的方法。

举一个图书管理系统的例子,有一个查询接口BookSearch,包括如下方法:searchById,searchByBookName,searchByCategory,complexSearch,其中前三个方法是提供给学生使用的,后一个方法是提供给管理员使用的,学生对这个方法的访问是有限制的,调用不会返回任何值。当这四个方法全部公布出去之后,学生对此方法的访问即使不返回任何值也会使服务器性能下降。

因此合理的设计应该是拆分这个接口为两个接口:SimpleSearch和AdminSearch。

SimpleSearch接口提供searchById,searchByBookName,searchByCategory方法,

AdminSearch接口提供complexSearch方法,

此时学生实现SimpleSearch接口即可,管理员同时实现SimpleSearch和AdminSearch两个接口。

猜你喜欢

转载自www.cnblogs.com/o-andy-o/p/10344358.html