1. 程式人生 > 其它 >設計模式-七大設計原則-介面隔離原則

設計模式-七大設計原則-介面隔離原則

一、介面隔離原則介紹

二、介面隔離原則引入

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();
    }
}