本文共 3498 字,大约阅读时间需要 11 分钟。
客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。
类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类D。如果接口Interface1对于类A和类C来说不是最小接口,那么类B和类D也会实现不需要的方法。关系图如下:
解决办法: 将接口Interface1拆分为独立的几个接口,类A和类C分别与它们需要的接口建立依赖关系public class Segregation1 { public static void main(String[] args) { }}// 接口interface Interface1{ void operation1(); void operation2(); void operation3(); void operation4(); void operation5();}class B implements Interface1{ public void operation1(){ System.out.println("B中 实现了operation1"); } public void operation2(){ System.out.println("B中 实现了operation2"); } public void operation3(){ System.out.println("B中 实现了operation3"); } public void operation4(){ System.out.println("B中 实现了operation4"); } public void operation5(){ System.out.println("B中 实现了operation5"); }}class D implements Interface1{ public void operation1(){ System.out.println("D中 实现了operation1"); } public void operation2(){ System.out.println("D中 实现了operation2"); } public void operation3(){ System.out.println("D中 实现了operation3"); } public void operation4(){ System.out.println("D中 实现了operation4"); } public void operation5(){ System.out.println("D中 实现了operation5"); }}class A { //A类通过接口Interface1 依赖(使用)B类,但是只会用到1,2,3方法 public void depend1(Interface1 i){ i.operation1(); } public void depend2(Interface1 i){ i.operation2(); } public void depend3(Interface1 i){ i.operation3(); }}class C { //C类通过接口Interface1 依赖(使用)D类,但是只会用到1,4,5方法 public void depend1(Interface1 i){ i.operation1(); } public void depend4(Interface1 i){ i.operation4(); } public void depend5(Interface1 i){ i.operation5(); }}
public class Segregation1 { public static void main(String[] args) { A a = new A(); a.depend1(new B()); a.depend2(new B()); a.depend3(new B()); C c = new C(); c.depend1(new D()); c.depend4(new D()); c.depend5(new D()); }}//接口1interface Interface1{ void operation1();}//接口2interface Interface2{ void operation2(); void operation3();}//接口3interface Interface3{ void operation4(); void operation5();}class B implements Interface1, Interface2 { public void operation1() { System.out.println("B中 实现了operation1"); } public void operation2() { System.out.println("B中 实现了operation2"); } public void operation3() { System.out.println("B中 实现了operation3"); }}class D implements Interface1, Interface3 { public void operation1(){ System.out.println("D中 实现了operation1"); } public void operation4(){ System.out.println("D中 实现了operation4"); } public void operation5(){ System.out.println("D中 实现了operation5"); }}class A { //A类通过接口Interface1 , Interface2依赖(使用)B类,但是只会用到1,2,3方法 public void depend1(Interface1 i){ i.operation1(); } public void depend2(Interface2 i){ i.operation2(); } public void depend3(Interface2 i){ i.operation3(); }}class C { //C类通过接口Interface1 ,Interface3依赖(使用)D类,但是只会用到1,4,5方法 public void depend1(Interface1 i){ i.operation1(); } public void depend4(Interface3 i){ i.operation4(); } public void depend5(Interface3 i){ i.operation5(); }}
运行结果:
B中 实现了operation1B中 实现了operation2B中 实现了operation3D中 实现了operation1D中 实现了operation4D中 实现了operation5
转载地址:http://irtii.baihongyu.com/