这是我在百战程序员第一天上课,老师给我们留的一个问题,让我们自己弄明白。
1、接口隔离原则定义:
客户端不应该依赖他不需要的接口;一个类中对另一个的依赖应该建立在最小的接口上。
2、问题由来:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对类A和类B来说不是最小接口,则类A和类B必须实现他们不需要的方法。
3、解决方案:
将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖的联系,也就是采用了接口隔离的原则。
可以看到,如果接口过于臃肿,只要接口中出现的方法,不管对依赖它的类有没有好处,实现类中都必须去实现这些方法,这显然不是好的设计。如果将这个设计修改为符合接口隔离原则,就必须对接口I进行拆分,在这里我们将原有的接口I拆分为三个接口,拆分后的设计如图2所示:
接口隔离原则的含义是:建立单一接口,尽量细化接口,接口中的方法尽量少。也就是说我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖他的类去调用。
要注意以下几个方面:
- 接口尽量小,但是要有限度。对接口进行细化可以提高程序设计灵活性是不争的事实,但是如果过小,则会造成接口数量过多,使设计负责化。
- 为依赖接口的类定制服务,只暴露给调用的类他需要的方法,他不需要的方法则隐藏起来。只有专注的为一个模块提供定制服务,才能建立最小的依赖关系。
- 提高内聚,减小对外交互。事接口用最少的方法去完成最多的事情。