亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java設(shè)計(jì)模式七大原則之接口隔離原則詳解

 更新時(shí)間:2022年02月10日 10:28:55   作者:溫故知新之java  
接口隔離原則(Interface Segregation Principle),又稱為ISP原則,就是在一個(gè)類中不要定義過(guò)多的方法,接口應(yīng)該盡量簡(jiǎn)單細(xì)化。本文將為大家具體介紹一下Java設(shè)計(jì)模式七大原則之一的接口隔離原則,需要的可以參考一下

定義

接口隔離原則(Interface Segregation Principle),又稱為ISP原則,官方定義為

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

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

簡(jiǎn)單點(diǎn)來(lái)講就是在一個(gè)類中不要定義過(guò)多的方法,接口應(yīng)該盡量簡(jiǎn)單細(xì)化

案例

需求

假設(shè)有這樣一個(gè)案例場(chǎng)景,現(xiàn)在有一個(gè)接口Repair,給定他有三個(gè)能力,可以修汽車(chē),修火車(chē),修飛機(jī), 兩個(gè)實(shí)現(xiàn)類張師傅,李師傅分別具有這些能力,有一個(gè)4S店類,假設(shè)是需要張師傅來(lái)修汽車(chē)和修飛機(jī),而另一個(gè)4s店類需要李師傅來(lái)修汽車(chē)和修火車(chē)

方案一

定義維修接口類Repair.java

/**
 * 維修類
 * @author:liyajie
 * @createTime:2022/1/29 17:00
 * @version:1.0
 */
public interface Repair {

    /**
     * 維修汽車(chē)
     * @author: liyajie
     * @date: 2022/1/29 17:03
     * @param
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    void car();

    /**
     * 維修火車(chē)
     * @author: liyajie
     * @date: 2022/1/29 17:03
     * @param
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    void train();

    /**
     * 維修飛機(jī)
     * @author: liyajie
     * @date: 2022/1/29 17:03
     * @param
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    void air();
}

維修李師傅類RepairLi.java

/**
 * 維修類
 * @author:liyajie
 * @createTime:2022/1/29 17:00
 * @version:1.0
 */
public class RepairLi implements Repair{


    @Override
    public void car() {
        System.out.println("李師傅修汽車(chē)");
    }

    @Override
    public void train() {
        System.out.println("李師傅修火車(chē)");
    }

    @Override
    public void air() {
        System.out.println("李師傅修飛機(jī)");
    }
}

維修王師傅類RepairWang.java

/**
 * 維修類
 * @author:liyajie
 * @createTime:2022/1/29 17:00
 * @version:1.0
 */
public class RepairWang implements Repair{

    @Override
    public void car() {
        System.out.println("王師傅修汽車(chē)");
    }

    @Override
    public void train() {
        System.out.println("王師傅修火車(chē)");
    }

    @Override
    public void air() {
        System.out.println("王師傅修飛機(jī)");
    }
}

4s店1

/**
 * 4s店1
 * @author:liyajie
 * @createTime:2022/1/29 17:07
 * @version:1.0
 */
public class S1Shop {

    /**
     * 修汽車(chē)
     * @author: liyajie
     * @date: 2022/1/29 17:10
     * @param repair
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void car(Repair repair){
        repair.car();
    }

    /**
     * 修火車(chē)
     * @author: liyajie
     * @date: 2022/1/29 17:10
     * @param repair
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void train(Repair repair){
        repair.train();
    }
}

4s店2

/**
 * 4s店2
 * @author:liyajie
 * @createTime:2022/1/29 17:07
 * @version:1.0
 */
public class S2Shop {
    /**
     * 修汽車(chē)
     * @author: liyajie
     * @date: 2022/1/29 17:10
     * @param repair
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void car(Repair repair){
        repair.car();
    }

    /**
     * 修飛機(jī)
     * @author: liyajie
     * @date: 2022/1/29 17:10
     * @param repair
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void air(Repair repair){
        repair.air();
    }
}

測(cè)試類1

/**
 * 測(cè)試類1
 * @author:liyajie
 * @createTime:2022/1/29 16:46
 * @version:1.0
 */
public class Test1 {
    public static void main(String[] args) {
        // 4s店1
        new S1Shop().car(new RepairLi());
        new S1Shop().train(new RepairLi());

        // 4s店2
        new S2Shop().car(new RepairWang());
        new S2Shop().air(new RepairWang());
    }
}

方案二

定義維修汽車(chē)接口

/**
 * 維修類
 * @author:liyajie
 * @createTime:2022/1/29 17:00
 * @version:1.0
 */
public interface RepairCar {

    /**
     * 維修汽車(chē)
     * @author: liyajie
     * @date: 2022/1/29 17:03
     * @param
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    void car();
}

定義維修火車(chē)類

/**
 * 維修類
 * @author:liyajie
 * @createTime:2022/1/29 17:00
 * @version:1.0
 */
public interface RepairTrain {

    /**
     * 維修火車(chē)
     * @author: liyajie
     * @date: 2022/1/29 17:03
     * @param
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    void train();
}

定義維修飛機(jī)類

/**
 * 維修類
 * @author:liyajie
 * @createTime:2022/1/29 17:00
 * @version:1.0
 */
public interface RepairAir {

    /**
     * 維修飛機(jī)
     * @author: liyajie
     * @date: 2022/1/29 17:03
     * @param
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    void air();
}

4s店1

/**
 * 4s店1
 * @author:liyajie
 * @createTime:2022/1/29 17:07
 * @version:1.0
 */
public class S1ShopNew {

    /**
     * 修汽車(chē)
     * @author: liyajie
     * @date: 2022/1/29 17:10
     * @param repairCar
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void car(RepairCar repairCar){
        repairCar.car();
    }

    /**
     * 修火車(chē)
     * @author: liyajie
     * @date: 2022/1/29 17:10
     * @param repairTrain
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void train(RepairTrain repairTrain){
        repairTrain.train();
    }
}

4s店2

/**
 * 4s店2
 * @author:liyajie
 * @createTime:2022/1/29 17:07
 * @version:1.0
 */
public class S2ShopNew {
    /**
     * 修汽車(chē)
     * @author: liyajie
     * @date: 2022/1/29 17:10
     * @param repairCar
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void car(RepairCar repairCar){
        repairCar.car();
    }

    /**
     * 修飛機(jī)
     * @author: liyajie
     * @date: 2022/1/29 17:10
     * @param repairAir
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void air(RepairAir repairAir){
        repairAir.air();
    }
}

測(cè)試類

/**
 * 測(cè)試類1
 * @author:liyajie
 * @createTime:2022/1/29 16:46
 * @version:1.0
 */
public class Test2 {
    public static void main(String[] args) {
        // 4s店1
        new S1ShopNew().car(new RepairLiNew());
        new S1ShopNew().train(new RepairLiNew());

        // 4s店2
        new S2ShopNew().car(new RepairWangNew());
        new S2ShopNew().air(new RepairWangNew());
    }
}

對(duì)比分析

方案一,違反了接口隔離原則,因?yàn)槔顜煾岛屯鯉煾刀紝?shí)現(xiàn)了維修接口的三個(gè)方法:修汽車(chē),修火車(chē),修飛機(jī)。但需求中并不需要這么多,只需要李師傅修汽車(chē)和火車(chē),王師傅修汽車(chē)和飛機(jī),依賴關(guān)系不是建立在最小接口上

方案二,遵守了接口隔離原則,對(duì)李師傅和王師傅類都進(jìn)行了接口隔離,實(shí)現(xiàn)了各自的兩個(gè)方法,避免了耦合

總結(jié)

通過(guò)上面兩個(gè)案例,我們可以得到以下結(jié)論: 接口隔離原則就是當(dāng)我一個(gè)類通過(guò)接口依賴(使用)另一個(gè)類的時(shí)候,要保證依賴的該接口是最小的,接口里面有方法用不到的,就進(jìn)行隔離,而隔離的做法就是,就對(duì)原來(lái)接口進(jìn)行拆分,拆分為最小粒度,來(lái)避免耦合。

小知識(shí)點(diǎn)

有沒(méi)有發(fā)現(xiàn)接口隔離原則與我們上一篇的單一職責(zé)原則有點(diǎn)相似,來(lái)看下他們的相同點(diǎn)和不同點(diǎn)吧

相同點(diǎn)

都要求對(duì)結(jié)構(gòu)進(jìn)行拆分,都要求更小的粒度,都希望減少耦合

不同點(diǎn)

1.單一職責(zé)原則:類與接口職責(zé)單一,注重的是職責(zé)

2.接口隔離原則:要求我們盡量使用多個(gè)專門(mén)的接口,注重的是接口的設(shè)計(jì)

以上就是Java設(shè)計(jì)模式七大原則之接口隔離原則詳解的詳細(xì)內(nèi)容,更多關(guān)于Java接口隔離原則的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JAVA8獨(dú)有的map遍歷方式(非常好用)

    JAVA8獨(dú)有的map遍歷方式(非常好用)

    這篇文章主要介紹了JAVA8獨(dú)有的map遍歷方式(非常好用),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • java登錄驗(yàn)證碼實(shí)現(xiàn)代碼

    java登錄驗(yàn)證碼實(shí)現(xiàn)代碼

    這篇文章介紹了java實(shí)現(xiàn)登錄驗(yàn)證碼:用興趣的同學(xué)可以參考一下
    2013-10-10
  • SpringBoot整合Mybatis-Plus+Druid實(shí)現(xiàn)多數(shù)據(jù)源配置功能

    SpringBoot整合Mybatis-Plus+Druid實(shí)現(xiàn)多數(shù)據(jù)源配置功能

    本文主要講解springboot?+mybatisplus?+?druid?實(shí)現(xiàn)多數(shù)據(jù)源配置功能以及一些必要的準(zhǔn)備及代碼說(shuō)明,具有一定的參考價(jià)值,感興趣的小伙伴可以借鑒一下
    2023-06-06
  • SpringBoot+RabbitMQ+Redis實(shí)現(xiàn)商品秒殺的示例代碼

    SpringBoot+RabbitMQ+Redis實(shí)現(xiàn)商品秒殺的示例代碼

    本文主要介紹了SpringBoot+RabbitMQ+Redis實(shí)現(xiàn)商品秒殺,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • RabbitMq的5種模式及實(shí)例解讀

    RabbitMq的5種模式及實(shí)例解讀

    這篇文章主要介紹了RabbitMq的5種模式及實(shí)例解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 如何利用Spring的@Import擴(kuò)展點(diǎn)與spring進(jìn)行無(wú)縫整合

    如何利用Spring的@Import擴(kuò)展點(diǎn)與spring進(jìn)行無(wú)縫整合

    這篇文章主要介紹了如何利用Spring的@Import擴(kuò)展點(diǎn)與spring進(jìn)行無(wú)縫整合的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 淺談Spring中HandlerMapping的使用

    淺談Spring中HandlerMapping的使用

    這篇文章主要介紹了淺談Spring中HandlerMapping的使用,Spingmvc中的HandlerMapping負(fù)責(zé)解析請(qǐng)求URL,對(duì)應(yīng)到Handler進(jìn)行處理,這里的Handler一般為Controller里的一個(gè)方法method,也可以為servlet或者Controller等,需要的朋友可以參考下
    2023-08-08
  • 使用java獲取指定鏈接的網(wǎng)頁(yè)內(nèi)容

    使用java獲取指定鏈接的網(wǎng)頁(yè)內(nèi)容

    Java提供了許多用于網(wǎng)絡(luò)通信的庫(kù),其中最常用的是HttpURLConnection和HttpClient,本文將使用HttpURLConnection進(jìn)行爬取指定鏈接的網(wǎng)頁(yè)內(nèi)容,感興趣的可以了解下
    2023-09-09
  • 淺談Java四種線程池及new Thread的弊端

    淺談Java四種線程池及new Thread的弊端

    本文主要介紹了淺談Java四種線程池及new Thread的弊端,詳細(xì)的介紹了newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor四種的使用,感興趣的可以了解一下
    2024-01-01
  • MyEclipse2017創(chuàng)建Spring項(xiàng)目的方法

    MyEclipse2017創(chuàng)建Spring項(xiàng)目的方法

    這篇文章主要為大家詳細(xì)介紹了MyEclipse2017創(chuàng)建Spring項(xiàng)目的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評(píng)論