設計六大原則之接口隔離原則

接口隔離原則:客戶端不應該依賴它不需要的接口。另一種定義:類間的依賴關係應該建立在最
小的接口上。接口隔離原則就是把龐大的、臃腫的接口拆分成儘可能小的和具體的接口,這樣客
戶只需要實現他需要實現的接口就可以了,那些不必要實現的接口就被隔離開了,即不在我們所
依賴接口的實現(implement)類中,代碼就會變得簡潔。說白了就是對一個複雜、臃腫的接口
進行拆分,使得每個接口的功能具體、簡單。

我們還是舉個簡單的例子說明:

1.我們創建一個接口,用於描述各種交通工具的接口Vehicle 

public interface Vehicle {
    void car();
    void bus();
    void truck();
}

2.現在我們去實現這個接口

2.1我要描述我的小車

public class MyCar implements Vehicle{
    private static final String TAG = "MyTest";
    @Override
    public void car() {
        Log.i(TAG,"This is my car.");
    }

    @Override
    public void bus() {
//這個方法不是必須的
    }

    @Override
    public void truck() {
//這個方法不是必須的
    }
}

我們會發現在MyCar這個類中,我們並沒有用到bus()和truck()這兩個方法。但由於它們是和car()在
同一個接口裏,所以也必須在MyCar類中出現。

同理看下下面這兩個方法一樣

public class MyTruck implements Vehicle{
    private static final String TAG = "MyTest";
    @Override
    public void car() {
//這個方法不是必須的
    }

    @Override
    public void bus() {
//這個方法不是必須的
    }

    @Override
    public void truck() {
        Log.i(TAG,"This is my truck.");
    }
}


public class MyBus implements Vehicle {
    private static final String TAG = "MyTest";

    @Override
    public void car() {
//這個方法不是必須的
    }

    @Override
    public void bus() {
        Log.i(TAG, "This is my bus.");
    }

    @Override
    public void truck() {
//這個方法不是必須的
    }
}

那我們該怎麼去簡化這種麻煩呢,讓代碼簡潔清晰明瞭,沒有多餘的部分。很簡單,接口隔離告
訴了我們只要把接口簡化了就可以了。我們把接口Vehicle拆分成三個,如下所示:

public interface Vehicle {
    void car();
    void bus();
    void truck();
}

public interface Car {
    void cars();
}

public interface Bus {
    void buss();
}

public interface Truck {
    void Trucks();
}



現在我們需要實現Car這個接口,代碼如下,是不是簡潔了很多,砍掉了多餘的部分。

public class CartA implements Car {
    private static final String TAG = "MyTest";
    @Override
    public void cars() {
        Log.i(TAG,"這是汽車A,價值2000萬。");
    }
}

public class CartB implements Car {
    private static final String TAG = "MyTest";

    @Override
    public void cars() {
        Log.i(TAG, "這是汽車B,價值100萬。");
    }
}

總結:
1.接口儘量小,儘量具體。但是接口過小,也會使得接口過多,從而變得複雜,具體需要怎麼樣的
接口需要對具體問題具體分析。這個需要一定的編程經驗。

2.考慮要依賴接口的類所需要的方法,不要多餘的,多餘的就變得臃腫,也不要太小,否則接口就
會變得躲起來,失去了使接口變小的意義,只有專注地爲某個模塊提供定製接口服務,纔可能建立
最小的依賴關係。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章