溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java面向?qū)ο蟮慕涌诟綦x原則怎么實現(xiàn)

發(fā)布時間:2022-01-14 11:06:40 來源:億速云 閱讀:125 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“Java面向?qū)ο蟮慕涌诟綦x原則怎么實現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Java面向?qū)ο蟮慕涌诟綦x原則怎么實現(xiàn)”吧!

定義

Interface Segregation Principle

  • 客戶端不應(yīng)依賴它不需要的接口

  • 類間的依賴關(guān)系應(yīng)該建立在最小的接口上

其實通俗來理解就是,不要在一個接口里面放很多的方法,這樣會顯得這個類很臃腫。接口應(yīng)該盡量細(xì)化,一個接口對應(yīng)一個功能模塊,同時接口里面的方法應(yīng)該盡可能的少,使接口更加靈活輕便?;蛟S有的人認(rèn)為接口隔離原則和單一職責(zé)原則很像,但兩個原則還是存在著明顯的區(qū)別。單一職責(zé)原則是在業(yè)務(wù)邏輯上的劃分,注重的是職責(zé)。接口隔離原則是基于接口設(shè)計考慮。例如一個接口的職責(zé)包含10個方法,這10個方法都放在同一接口中,并且提供給多個模塊調(diào)用,但不同模塊需要依賴的方法是不一樣的,這時模塊為了實現(xiàn)自己的功能就不得不實現(xiàn)一些對其沒有意義的方法,這樣的設(shè)計是不符合接口隔離原則的。接口隔離原則要求"盡量使用多個專門的接口"專門提供給不同的模塊。 

由來

類A通過接口I依賴類B,類C通過接口I依賴類D,如果接口I對于類A和類B來說不是最小接口,則類B和類D必須去實現(xiàn)他們不需要的方法。

Java面向?qū)ο蟮慕涌诟綦x原則怎么實現(xiàn)    

舉例:

public interface School {

    /**
     * 上課
     */
    void attendClass();

    /**
     * 下課
     */
    void afterClass();

    /**
     * 學(xué)習(xí)
     */
    void learn();

    /**
     * 講課
     */
    void lecture();
}
 

假設(shè)此時有一個People類,它的角色是學(xué)生,實現(xiàn)了School接口。它就會被迫實現(xiàn)“講課”這個方法,事實它是不需要該方法的。這就造成了代碼的冗余,使我們的代碼變得臃腫。 

解決

將臃腫的接口I拆分為獨立的幾個接口,類A和類C分別與他們需要的接口建立依賴關(guān)系。

Java面向?qū)ο蟮慕涌诟綦x原則怎么實現(xiàn)    

舉例:
學(xué)校接口

public interface School {

    /**
     * 上課
     */
    void attendClass();

    /**
     * 下課
     */
    void afterClass();

}
 

老師接口

public interface Teacher {

    /**
     * 講課
     */
    void lecture();
}
 

學(xué)生接口

public interface School {

    /**
     * 學(xué)習(xí)
     */
    void learn();

}

通過上面的拆分我們就可以有效避免冗余代碼的產(chǎn)生,進(jìn)而還可以促使我們的代碼變得更加靈活。 

優(yōu)點 

避免接口污染

一個類如果要實現(xiàn)一個接口,那么就要實現(xiàn)這個接口要求的所有方法,如果這個接口里面包含這個類不需要的方法,那么就會造成接口污染,這是不好的設(shè)計,會對系統(tǒng)留下隱患。 

提高靈活性

一個類是可以同時實現(xiàn)多個接口的,所以將一個臃腫的接口分割為若干個小接口,通過小接口的不同組合可以滿足更多的需求。 

提供定制服務(wù)

定制服務(wù)就是單獨為一個個體提供優(yōu)良的服務(wù)。我們在做系統(tǒng)設(shè)計時也需要考慮對系統(tǒng)之間或模塊之間的接口提供定制服務(wù)。提供定制服務(wù)就必然有一個需求:只提供訪問者需要的方法。這也是可以通過細(xì)化接口實現(xiàn)的。 

高內(nèi)聚

什么是高內(nèi)聚?高內(nèi)聚就是提高接口、類、模塊的處理能力,減少對外的交互。比如說,你告訴你的下屬“一個小時之內(nèi)去月球搬一塊石頭回來”,然后你就躺在海灘上曬著太陽喝著果汁,一個小時之后你的下屬就搬著一塊月亮上的石頭回來給你了。這種不講任何條件,不需要你關(guān)心任何細(xì)節(jié),立即完成任務(wù)的行為就是高內(nèi)聚的表現(xiàn)。

具體到接口中,還是盡量細(xì)化你的接口。接口是對外界的承諾,承諾越少對系統(tǒng)的開發(fā)越有利,變更的風(fēng)險也就越少,同時也有利于降低成本。

到此,相信大家對“Java面向?qū)ο蟮慕涌诟綦x原則怎么實現(xiàn)”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)
AI