設計模式-七大設計原則-介面隔離原則
阿新 • • 發佈:2021-06-30
一、介面隔離原則介紹
二、介面隔離原則引入
1.方式一(違反了介面隔離原則)
UML類圖:
程式碼及解析:對A類來說,B類從介面中實現的4、5方法是多餘的。對C類來說,D類從介面中實現的2、3方法是多餘的。所以違反了介面隔離原則。
//介面 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(); } }
2.方式二(遵守了介面隔離原則)
UML類圖:
程式碼及解析:A類通過介面1、介面2去依賴B類;C類通過介面1、介面3去依賴D類,這裡介面1、2、3都屬於最小的介面。所以遵守了介面隔離原則。
public class Segregation1 { public static void main(String[] args) { A a = new A(); a.depend1(new B());//A類通過介面1、介面2去依賴B類 a.depend2(new B()); a.depend3(new B()); C c = new C(); c.depend1(new D());//C類通過介面1、介面3去依賴D類 c.depend4(new D()); c.depend5(new D()); } } //介面1 interface Interface1 { void operation1(); } //介面2 interface Interface2 { void operation2(); void operation3(); } //介面3 interface Interface3 { void operation4(); void operation5(); } class B implements Interface1, Interface2{ @Override public void operation1() { System.out.println("B中實現了operation1"); } @Override public void operation2() { System.out.println("B中實現了operation2"); } @Override public void operation3() { System.out.println("B中實現了operation3"); } } class D implements Interface1, Interface3 { @Override public void operation1() { System.out.println("D中實現了operation1"); } @Override public void operation4() { System.out.println("D中實現了operation4"); } @Override public void operation5() { System.out.println("D中實現了operation5"); } } //A類通過介面Interface1、Interface2依賴(使用)B類,但是隻會用到1,2,3方法 class A { public void depend1(Interface1 i){ i.operation1(); } public void depend2(Interface2 i){ i.operation2(); } public void depend3(Interface2 i){ i.operation3(); } } //C類通過介面Interface1、Interface3依賴(使用)D類,但是隻會用到1,4,5方法 class C { public void depend1(Interface1 i){ i.operation1(); } public void depend4(Interface3 i){ i.operation4(); } public void depend5(Interface3 i){ i.operation5(); } }