成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

接口隔離原則,到底什么需要隔離?

開發(fā)
接口隔離可以提高代碼的可讀性、可維護(hù)性和靈活性,減少系統(tǒng)的耦合度,在實(shí)際開發(fā)中,合理應(yīng)用接口隔離原則,可以幫助我們創(chuàng)建高質(zhì)量的代碼和系統(tǒng)。

通過前面的文章,SRP限制一個(gè)類的變化來源應(yīng)該是單一的;OCP要求不要隨意修改一個(gè)類;LSP則規(guī)范了類的繼承關(guān)系。那么接口隔離原則會(huì)給我們帶來什么驚喜呢?今天我們就來聊一聊。

什么是接口隔離?

接口隔離原則,Interface segregation principle(ISP),也是 Robert C. Martin提出的 SOLID原則中的一種,老規(guī)矩,還是先看看作者 Robert C. Martin 對(duì)接口隔離原則是如何定義的:

Clients should not be forced to depend upon interfaces that they do not use.

在作者對(duì)接口隔離原則的定義中強(qiáng)調(diào):不應(yīng)強(qiáng)迫客戶依賴他們不使用的接口。

在 Java中,我們一直都強(qiáng)調(diào)要面向接口編程,足以看出接口在 Java中的重要性。其實(shí), 與單一職責(zé)原則類似,接口隔離原則的目標(biāo)是通過將軟件拆分為多個(gè)獨(dú)立的部分來減少所需更改的副作用和頻率。

這里的"不應(yīng)強(qiáng)迫"該如何理解?通常來講"不應(yīng)強(qiáng)迫" 有2種理解:

  • 第一種理解是用戶不能被強(qiáng)迫使用整個(gè)接口。
  • 第二種理解是用戶只使用接口中的部分方法,其余的方法不能被強(qiáng)迫使用。

顯然,第二種理解比較合理,所以接口隔離原則可以更直白一點(diǎn)的表達(dá)成:在接口中,不要放置接口使用者不需要的方法。

站在接口使用者的角度,這樣的設(shè)計(jì)更加人性化,為什么要增加一些我不需要的依賴負(fù)擔(dān)呢?

如何實(shí)現(xiàn)接口隔離?

假如有一個(gè)業(yè)務(wù)場(chǎng)景,需要定義一個(gè)交通工具的 Transportation類,類中包含設(shè)置基本信息(價(jià)格,顏色),啟停以及飛行等方法:

public interface Transportation{
    void setPrice(double price);
    void setColor(String color);
    void start();
    void stop();
    void fly();
}

汽車屬于一種交通工具,因此我們可以定義一個(gè) Car類去實(shí)現(xiàn) Transportation類,代碼如下:

public class Car implements Transportation {
    @Override
    public void setPrice(double price) {
       // 價(jià)格設(shè)置邏輯
    }
    @Override
    public void setColor(String color) {
        // 顏色設(shè)置邏輯
    }
    @Override
    public void start(){
        // 啟動(dòng)邏輯
    }
    @Override
    public void stop(){
        // 停止邏輯
    }
    @Override
    public void fly(){
        // 飛行邏輯
    }
}

從上面的代碼可以發(fā)現(xiàn)一個(gè)問題:Car不能飛行卻要實(shí)現(xiàn) fly()方法,為什么?顯然 fly()這個(gè)方法是 Car這種交通工具不需要關(guān)注的,這就違反了接口隔離原則。

如何解決這個(gè)問題呢?

首先,我們將交通工具接口分成多個(gè)角色接口,每個(gè)角色接口用于特定的行為,在這里我們可以將 Transportation分成 BasicFeature、 Movable、Flyable 三類行為接口。

// 基本屬性, 價(jià)格,顏色
public interface BasicFeature{
    void setPrice(double price);
    void setColor(String color);
}

// Movable 行為, 行駛和停止
public interface Movable {
    void start();
    void stop();
}

// 飛行 行為
public interface Flyable {
    void fly();
}

而 Car只需要關(guān)注基本屬性和 Movable行為,代碼如下:

public class Car implements BasicFeature, Movable {
    @Override
    public void setPrice(double price) {
        // 價(jià)格設(shè)置邏輯
    }
    @Override
    public void setColor(String color) {
        // 顏色設(shè)置邏輯
    }
    @Override
    public void start(){
        // 啟動(dòng)邏輯
    }
    @Override
    public void stop(){
        // 停止邏輯
    }
}

Airplane飛機(jī)需要關(guān)注基本屬性,Movable行為和飛行行為,代碼如下:

public class Airplane implements BasicCFeature, Movable, Flyable {
    @Override
    public void setPrice(double price) {
        // 價(jià)格設(shè)置邏輯
    }
    @Override
    public void setColor(String color) {
        // 顏色設(shè)置邏輯
    }
    @Override
    public void start(){
        // 啟動(dòng)邏輯
    }
    @Override
    public void stop(){
        // 停止邏輯
    }
    @Override
    public void fly(){
        // 飛行邏輯
    }
}

通過上面的拆解,我們可以看到每種交通工具只需要關(guān)注自己需要的接口就好了,自己不需要的接口就不會(huì)被強(qiáng)迫關(guān)注,更加不會(huì)造成 Car能 fly()這樣不常見的誤區(qū)。

接口隔離和單一職責(zé)的比較

接口隔離原則和單一職責(zé)原則都是 SOLID設(shè)計(jì)原則中的重要組成部分,雖然它們有一些相似之處,但它們關(guān)注的重點(diǎn)和應(yīng)用的范圍有所不同,在實(shí)際開發(fā)中,很容易搞混淆,因此,這里對(duì)這兩個(gè)原則做詳細(xì)比較。

  • 關(guān)注點(diǎn)不同 單一職責(zé)原則(SRP):關(guān)注類的職責(zé)劃分,確保每個(gè)類只有為一類行為負(fù)責(zé),它主要解決的是類內(nèi)部職責(zé)過多導(dǎo)致的復(fù)雜性問題。接口隔離原則(ISP):關(guān)注接口的設(shè)計(jì),確保客戶端只依賴于它們實(shí)際需要的方法。它主要解決的是接口過于龐大導(dǎo)致的依賴問題。
  • 作用范圍不同 單一職責(zé)原則(SRP):作用于類的設(shè)計(jì)和實(shí)現(xiàn)層面,通過分離職責(zé)提高類的內(nèi)聚性。接口隔離原則(ISP):作用于接口的設(shè)計(jì)層面,通過細(xì)化接口減少客戶端的依賴,提高系統(tǒng)的靈活性。
  • 實(shí)現(xiàn)方法不同 單一職責(zé)原則(SRP):通過將一個(gè)類的多種職責(zé)分離成多個(gè)獨(dú)立的類來實(shí)現(xiàn)。接口隔離原則(ISP):通過將一個(gè)大接口分解為多個(gè)小接口,讓不同的客戶端依賴于不同的小接口來實(shí)現(xiàn)。

因此,接口隔離原則是在遵守單一職責(zé)原則的前提下,將接口更加細(xì)化。

總結(jié)

接口隔離可以提高代碼的可讀性、可維護(hù)性和靈活性,減少系統(tǒng)的耦合度,在實(shí)際開發(fā)中,合理應(yīng)用接口隔離原則,可以幫助我們創(chuàng)建高質(zhì)量的代碼和系統(tǒng)。然而,在應(yīng)用時(shí)需要注意適度細(xì)化和明確職責(zé),避免過度設(shè)計(jì)和接口混亂。

責(zé)任編輯:趙寧寧 來源: 猿java
相關(guān)推薦

2012-03-07 11:03:13

Java設(shè)計(jì)模式

2017-04-03 21:52:30

隔離線程池分布式

2019-07-02 14:08:50

物理隔離工業(yè)控制網(wǎng)絡(luò)工控安全

2022-07-26 07:14:20

線程隔離Thread

2010-09-25 17:27:43

2025-04-16 08:50:00

信號(hào)量隔離線程池隔離并發(fā)控制

2021-08-26 06:58:15

Innodb RR隔離級(jí)別

2024-04-23 08:17:14

MySQL數(shù)據(jù)庫(kù)隔離

2019-10-12 00:24:29

微隔離SDN安全架構(gòu)

2022-09-08 08:02:26

MySQL隔離

2021-01-22 06:03:55

核酸隔離APP

2016-10-20 14:04:09

2009-06-29 17:54:47

Spring事務(wù)隔離

2018-12-19 16:46:38

MySQL事務(wù)隔離數(shù)據(jù)庫(kù)

2010-11-19 16:13:06

oracle事務(wù)隔離級(jí)

2021-08-04 13:19:42

MySQL 事務(wù)隔離

2024-05-10 09:31:22

務(wù)隔離級(jí)別Python

2009-01-11 10:20:00

局域網(wǎng)隔離網(wǎng)絡(luò)管理

2023-04-28 09:05:20

魔方基礎(chǔ)流程

2020-06-16 10:11:17

微隔離零信任漏洞
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产成在线观看免费视频 | 欧美精品久久久久久 | 日韩久久综合网 | 成人精品一区二区三区中文字幕 | 国产福利观看 | 国产成人精品久久二区二区91 | 成人小视频在线观看 | 成人精品一区二区三区中文字幕 | 成人欧美一区二区三区在线播放 | 99精品视频一区二区三区 | 一区二区三区四区视频 | 欧美在线视频a | 精品96久久久久久中文字幕无 | 美国一级毛片a | 久久鲁视频 | 欧美一级免费看 | 免费九九视频 | 国产一级片| 东方伊人免费在线观看 | 999精品视频 | 在线观看成年人视频 | 精品蜜桃一区二区三区 | 日本一二三区在线观看 | 9999在线视频 | 欧美亚洲国语精品一区二区 | 高清一区二区三区 | 国产欧美日韩在线 | 国产这里只有精品 | 日韩淫片免费看 | 欧美日韩高清 | 精品一区二区三区91 | 免费成人高清在线视频 | 夜夜爽99久久国产综合精品女不卡 | 国产精品国色综合久久 | 亚洲精品黄色 | 日韩在线视频播放 | 国产日韩精品一区二区三区 | 国产在线一区二区 | av在线免费观看网址 | 欧美一区二区精品 | 亚洲视频中文字幕 |