接口隔离原则:
一个类不应该依赖他不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口之上
这句话理解起来可能表晦涩,我们来举个例子对比说明一下就立刻明白什么叫“接口隔离原则”了
1 //接口A 2 interface A{ 3 void a(); 4 void b(); 5 void c(); 6 void d(); 7 } 8 9 //B实现了接口A,但是B实际上仅仅需要a和b两个方法,而c和d根本就用不到 10 class B implements A{ 11 @Override 12 public void a() { 13 System.out.println("a方法B类需要"); 14 } 15 @Override 16 public void b() { 17 System.out.println("b方法B类需要"); 18 } 19 @Override 20 public void c() { 21 System.out.println("c方法B类不需要"); 22 } 23 @Override 24 public void d() { 25 System.out.println("d方法B类不需要"); 26 } 27 } 28 29 //B实现了接口A,但是B实际上仅仅需要a和b两个方法,而c和d根本就用不到 30 class D implements A{ 31 @Override 32 public void a() { 33 System.out.println("a方法D不需要"); 34 } 35 @Override 36 public void b() { 37 System.out.println("b方法D类不需要"); 38 } 39 @Override 40 public void c() { 41 System.out.println("c方法D类需要"); 42 } 43 @Override 44 public void d() { 45 System.out.println("d方法D类需要"); 46 } 47 }
以上是没有遵循接口隔离原则的,我们发现接口A里面有a、b、c、d四个方法,同时B和D都实现了A接口,但是B类只要a和b两个方法,D类只需要d和c两个方法,也就是说这个时候对于B类而言c和d完全是没有用的,同理对于D而言a和b方法完全是没用的。这样的设计显然是不合理的。
下面遵循接口隔离原则重新设计接口
1 interface A{ 2 void a(); 3 void b(); 4 } 5 interface C{ 6 void c(); 7 void d(); 8 } 9 class B implements A{ 10 11 @Override 12 public void a() { 13 14 } 15 16 @Override 17 public void b() { 18 19 } 20 } 21 22 23 class D implements C{ 24 25 @Override 26 public void c() { 27 28 } 29 30 @Override 31 public void d() { 32 33 } 34 }
可见,根据接口隔离的原则设计的接口不管是在B还是在D类中都没有用不到的方法,之前的A接口被拆分成了A和C接口。这样的设计原则就是接口隔离原则