前言
面向对象有人分为五大原则,分别为单一职责原则、开放封闭原则、依赖倒置原则、接口隔离原则、里氏替换原则。
也有人分为六大原则,分别为单一职责原则、开放封闭原则、依赖倒置原则、接口隔离原则、里氏替换原则、迪米特法则。
现在我们来介绍接口隔离原则
接口隔离原则
1)概念
客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。
怎么理解呢?通俗一点就是说接口尽量细分,把不需要的方法尽量写在2个不同的接口上。
假如我有一个接口Interface1,有5个方法。其中Class1想实现第1-3个方法,Class2想实现第3-5个方法。
那么我只有一个Interface1,如果达到上面的要求,Class1与Class2只能实现Interface1的5个方法,如下:
那么就变得很臃肿了。有什么解决办法呢?接口分离原则很好地解决了以上方法。
我们把Interface1分离3个接口,然后Class1与Class2分别继承对应的接口,如下:
这样,很好的消除了冗余。
2)深入了解
接口隔离原则的含义是:建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。也就是说,我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。本文例子中,将一个庞大的接口变更为3个专用的接口所采用的就是接口隔离原则。在程序设计中,依赖几个专用的接口要比依赖一个综合的接口更灵活。接口是设计时对外部设定的“契约”,通过分散定义多个接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。
说到这里,很多人会觉的接口隔离原则跟之前的单一职责原则很相似,其实不然。其一,单一职责原则原注重的是职责;而接口隔离原则注重对接口依赖的隔离。其二,单一职责原则主要是约束类,其次才是接口和方法,它针对的是程序中的实现和细节;而接口隔离原则主要约束接口接口,主要针对抽象,针对程序整体框架的构建。
采用接口隔离原则对接口进行约束时,要注意以下几点:
- 接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不挣的事实,但是如果过小,则会造成接口数量过多,使设计复杂化。所以一定要适度。
- 为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
- 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。
运用接口隔离原则,一定要适度,接口设计的过大或过小都不好。设计接口的时候,只有多花些时间去思考和筹划,才能准确地实践这一原则。
3)生活中例子
比如,我们身边的手机,有打电话、支付、摄影、聊天、玩游戏功能。
我们可以定义一个接口IPhoneOperation来说明这些功能。这样臃不臃肿,要看业务逻辑。
我们现在定一个业务逻辑,把手机功能分成业余娱乐、生活支付、工作电话。可以拆分接口分别为:
拆分各种接口后,在业务层面我们更加容易地了解各自的业务功能实现;在代码层面我们更加的高内聚,低耦合。
其他链接: