10.3.4 接口隔离原则(Interface Segregation Principle)
接口隔离原则的意思是:使用多个隔离的接口,比使用单个接口好。也就是说,一个类对另外一个类的依赖性应当是建立在最小的接口上的。
在我们进行设计的时候,一个重要的工作就是恰当地划分角色和角色对应的接口。因此,这里的接口往往有两种不同的含义。
1.接口对应的角色
指一个类型所具有的方法特征的集合,仅仅是一种逻辑上的抽象,接口的划分就直接带来类型的划分。这里,我们可以把接口理解成角色,一个接口只是代表一个角色,每个角色都有它特定的一个接口,这里的这个原则可以叫做角色隔离原则。
例如,我们将电脑的所有功能角色集合为一起,构建了一个接口,如图10-3所示。
此时,我的电脑和你的电脑要实现该接口,就必须实现所有的接口函数,显然接口混乱,并不能够满足实际的需求:我的电脑可能是用来工作和学习的,你的电脑可能是用来看电影、上网和打游戏等娱乐活动的,那我们就可以将电脑的角色划分为两类,如图10-4所示。
2.角色对应的接口
指某种语言具体的接口定义,有严格的定义和结构。比如Java语言里面的Interface结构。对不同的客户端,同一个角色提供宽窄不同的接口,也就是定制服务,仅仅提供客户端需要的行为,客户端不需要的行为则隐藏起来。
对于图10-4中的接口定义,如果我的电脑除了工作和学习之外,还想上网,那就没办法了,必须实现娱乐电脑的接口,这样就必须实现它的所有接口函数了。此时我们需要将对应角色中的接口再进行划分,如图10-5所示。
这样,经过以上的划分,如果我的电脑想增加某一项功能,只需要继承不同的接口类即可。
由此可见,对接口角色的划分,是从大的类上进行划分的;对角色的接口进行的划分,是对类的接口函数的划分。它们两者由粗到细,实现了接口的完全分离。