设计模式六大原则之 接口隔离原则

接口隔离原则

接口隔离原则其定义有两种:

定义

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个方法,这十个方法提供给多个模块使用,不同模块下根据各自的权限来访问,这在单一职责的角度来看是允许的,但按照接口隔离的角度来看,可能就不合理了,因为它要求“尽量使用多个专门的接口”。专门的接口指的是什么?就是指提供给每个模块的单一接口,提供给几个模块就应该有几个接口,而不是建立一个庞大的臃肿的接口,容纳所有的客户端访问。

对接口规范的约束

1.接口要尽量小

但前提要求是要满足单一职责原则

2.接口要高内聚

3.定制服务

例如一个图书管理系统的查询接口

IBookSearcher
+ void searchByAuthor()
+ void searchByTitle()
+ void searchByPublisher()
+ void searchByCatagory()
+ void complexSearch(Map map)

按照模块进行接口拆分后,分成了两个接口

ISimpleBookSearcher
+ void searchByAuthor()
+ void searchByTitle()
+ void searchByPublisher()
+ void searchByCatagory()

IComplexBookSearcher
+ void complexSearch(Map map)

4.接口设计是有限度的

接口的设计颗粒度越小,系统越灵活,但是,灵活的同时带来了结构的复杂化,开发难度增加,可维护性降低,
所以接口设计一定要注意适度,这个“度”通常是根据经验和常识来判断,没有一个固化或可测量的标准。