設計模式的七大原則(2) --接口隔離原則

前言

上一節咱們學習了單一職責原則,簡單來講就是各司其職,廚師就專一作好菜,不要跑到前堂作起小二。app

可是呢,萬事無一絕對。若是隻是小飯店有時候也不是特別嚴格。仍是那句話,原則是死的,人是活的ide

接下來咱們來學習接口隔離原則。學習

基本介紹

客戶端不該該依賴它不須要的接口,即一個類對另外一個類的依賴應該創建在最小的接口上。設計

怎麼理解呢?code

就是說,一個接口擁有的行爲應該儘量的小。接口

若是說這個接口定義了不少方法,可是呢,咱們實現這個接口的時候並不須要這麼多的方法。那麼你就會發現,除了個別幾個你須要的方法實現了,不少不須要的方法也必須得實現了,形成不少空方法的出現。class

這是一種很糟糕的設計,這樣作不只會強制實現原本不應實現的方法,最嚴重的是會給使用者形成假象,即這個實現類擁有接口中全部的行爲,結果調用方法時卻沒收穫到想要的結果。擴展

案例

案例以下:jdk

public interface Car {

    void run();

    void fly();

    void appearance();
}
public class Audi implements Car {
    public static void main(String args[]){
        Audi audi = new Audi();
        audi.run();
        audi.appearance();
        audi.fly();
    }

    @Override
    public void appearance() {
        System.out.println("我奧迪有炫酷的車燈");
    }

    @Override
    public void run() {
        System.out.println("我不光能跑,我還跑的很快");
    }

    @Override
    public void fly() {

    }
}

上訴代碼輸出結果方法

我不光能跑,我還跑的很快
我奧迪有炫酷的車燈

上訴代碼中的接口Car就沒有遵循最小接口原則。由於這個接口定義了一個並不屬於Car的方法fly()。你在實現這個接口的時候你也必須重寫fly()方法。

可是呢,車並無這個功能,因此大部分狀況下你會將這個方法重寫了可是裏面是空方法。

首先代碼不簡潔。其次當某我的調用該類方法的時候,就會給使用者形成車會飛的假象。

default關鍵字

上述代碼在JDK1.8版本之後還能能寫成這種形式

public interface Car {

    default void run(){
        System.out.println("我能跑");
    }

    default void fly(){
        System.out.println(("我不能飛"));
    }

    void appearance();
}
public class Audi implements Car {
    public static void main(String args[]){
        Audi audi = new Audi();
        audi.run();         //我不光能跑,我還跑的很快
        audi.appearance();  //我有炫酷的車燈
        audi.fly();         //我不能飛
    }

    @Override
    public void appearance() {
        System.out.println("我有炫酷的車燈");
    }

    @Override
    public void run() {
        System.out.println("我不光能跑,我還跑的很快");
    }
}

在jdk1.8之後提供了default關鍵字,這個關鍵字的出現讓接口可以有默認的實現方式。

好比Car接口的的run()方法和fly()方法實現了default關鍵字,那麼就能直接在接口當中把這個方法給實現了。

當某個類實現了這個接口的時候,就不須要強制重寫該方法。

有人就會問了,是否是在1.8版本之後就能夠不須要遵循最小接口原則了?答案是否認了。

即使你不須要實現這個方法,可是在使用者眼中,就會給使用者形成車會飛的假象。

固然,仍是那句話,人是活的,規則是死的。不少時候咱們並非說必須百分百按照這種要求來實現咱們的代碼。

當你的代碼嚴格實現該原則的時候發現,致使代碼的可閱讀性,可擴展性下降。甚至邏輯也複雜了不少。那麼就能夠按照具體的狀況違背這種原則。

總結

接口隔離原則和職責單一原則有共同性。你們能夠多思考一下。

仍是那句話慢慢的學,一個一個掌握,才更深入,貪多嚼不爛。

下一篇咱們來學習依賴倒轉原則。

相關文章
相關標籤/搜索