接口隔离原则
基本介绍:
客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上
例如以下场景:
当ClassA需要实现接口interface1中的1、2、3方法时,在方法调用C
当ClassB需要实现接口interface1中的1、4、5方法时,在方法调用D
class A{ public void opt1(interface1 i){ i.opt1(); } public void opt2(interface1 i){ i.opt2(); } public void opt3(interface1 i){ i.opt3(); } } class B{ public void opt1(interface1 i){ i.opt1(); } public void opt4(interface1 i){ i.opt4(); } public void opt5(interface1 i){ i.opt5(); } } class C implements interface1{ public void opt1(){ } public void opt2(){ } public void opt3(){ } //以下方法用不着,却必须实现,造成接口隔离原则破坏 public void opt4(){ } public void opt5(){ } } class D implements interface1{ public void opt1(){ } public void opt4(){ } public void opt5(){ } //以下方法用不着,却必须实现,造成接口隔离原则破坏 public void opt2(){ } public void opt3(){ } } //示例 public class com{ public static void main(){ new A().opt1(new B()); } }
上述代码中实现 C、D类 产生了冗余的实现方法,接口应该切分。
例子如下:
在进行粒度化拆分后,Class C、D就不会导致内部实现过多冗余的方法,同时接口是最小接口
注意事项:
- 接口尽量小,但是要有限度
- 为依赖接口的类定制服务,只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。只有专注地为一个模块提供定制服务,才能建立最小的依赖关系。
- 提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。