最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

定義

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

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

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

簡單點來講就是在一個類中不要定義過多的方法,接口應(yīng)該盡量簡單細化

案例

需求

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

方案一

定義維修接口類Repair.java

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

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

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

    /**
     * 維修飛機
     * @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("李師傅修汽車");
    }

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

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

維修王師傅類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("王師傅修汽車");
    }

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

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

4s店1

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

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

    /**
     * 修火車
     * @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 {
    /**
     * 修汽車
     * @author: liyajie
     * @date: 2022/1/29 17:10
     * @param repair
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void car(Repair repair){
        repair.car();
    }

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

測試類1

/**
 * 測試類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());
    }
}

方案二

定義維修汽車接口

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

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

定義維修火車類

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

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

定義維修飛機類

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

    /**
     * 維修飛機
     * @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 {

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

    /**
     * 修火車
     * @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 {
    /**
     * 修汽車
     * @author: liyajie
     * @date: 2022/1/29 17:10
     * @param repairCar
     * @return void
     * @exception:
     * @update:
     * @updatePerson:
     **/
    public void car(RepairCar repairCar){
        repairCar.car();
    }

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

測試類

/**
 * 測試類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());
    }
}

對比分析

方案一,違反了接口隔離原則,因為李師傅和王師傅都實現(xiàn)了維修接口的三個方法:修汽車,修火車,修飛機。但需求中并不需要這么多,只需要李師傅修汽車和火車,王師傅修汽車和飛機,依賴關(guān)系不是建立在最小接口上

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

總結(jié)

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

小知識點

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

相同點

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

不同點

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

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

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

相關(guān)文章

  • java web實現(xiàn)分頁查詢實例方法

    java web實現(xiàn)分頁查詢實例方法

    在本篇文章里我們給大家分享了java web實現(xiàn)分頁查詢的詳細方法知識點,有需要的朋友們參考學(xué)習(xí)下。
    2018-10-10
  • Spring集成webSocket頁面訪問404問題的解決方法

    Spring集成webSocket頁面訪問404問題的解決方法

    這篇文章主要介紹了Spring集成webSocket頁面訪問404問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Java中的緩沖流詳細解析

    Java中的緩沖流詳細解析

    這篇文章主要介紹了Java中的緩沖流詳細解析,緩沖流可以分為字節(jié)緩沖流,字符緩沖流,字節(jié)緩沖流可分為字節(jié)輸?入緩沖流,字節(jié)輸出緩沖流,字符緩沖流可以分為字符輸入緩沖流,字符輸出緩沖流,需要的朋友可以參考下
    2023-11-11
  • SpringBoot FreeWorker模板技術(shù)解析

    SpringBoot FreeWorker模板技術(shù)解析

    這篇文章主要介紹了SpringBoot FreeWorker模板技術(shù)解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java?實現(xiàn)訂單未支付超時自動取消功能(京東商城為例)

    Java?實現(xiàn)訂單未支付超時自動取消功能(京東商城為例)

    本文以京東網(wǎng)上商城為例,給大家介紹商品在下單后沒有支付的情況下,超時自動取消功能,超過24小時,就會自動取消訂單,下面使用 Java 定時器實現(xiàn)超時取消訂單功能,感興趣的朋友一起看看吧
    2022-01-01
  • java使用influxDB數(shù)據(jù)庫的詳細代碼

    java使用influxDB數(shù)據(jù)庫的詳細代碼

    這篇文章主要為大家介紹了java使用influxDB數(shù)據(jù)庫的詳細代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Java SpringBoot高級用法詳解

    Java SpringBoot高級用法詳解

    這篇文章主要為大家詳細介紹了Java Spring Boot的一些高級用法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-09-09
  • Java8使用stream查找重復(fù)元素的方法示例

    Java8使用stream查找重復(fù)元素的方法示例

    Java?8?是一個非常成功的版本,這個版本新增的Stream,配合同版本出現(xiàn)的Lambda?,給我們操作集合(Collection)提供了極大的便利,Stream流是JDK8新增的成員,本文給大家介紹了Java8使用stream查找重復(fù)元素的方法示例,需要的朋友可以參考下
    2024-04-04
  • Java中Map的排序問題詳解

    Java中Map的排序問題詳解

    本文給大家分享的是java中的map的按值排序和按鍵排序問題,并通過具體的示例,希望對大家能有所幫助。
    2016-01-01
  • java中flatMap用法完整示例

    java中flatMap用法完整示例

    flatMap是java8的Stream流的一個方法,下面這篇文章主要給大家介紹了關(guān)于java中flatMap用法的相關(guān)資料,文中通過示例代碼和圖文介紹的非常詳細,需要的朋友可以參考下
    2023-05-05

最新評論

黄龙县| 南涧| 南投市| 漠河县| 波密县| 同仁县| 含山县| 漳浦县| 合阳县| 通榆县| 信丰县| 汽车| 金沙县| 张家界市| 太白县| 丁青县| 邵阳县| 新闻| 周宁县| 深水埗区| 前郭尔| 阳高县| 新密市| 贵南县| 宁阳县| 寿宁县| 青铜峡市| 江津市| 喀喇沁旗| 赫章县| 桂东县| 通江县| 老河口市| 紫阳县| 绥芬河市| 新兴县| 常山县| 马鞍山市| 沾化县| 武穴市| 淮滨县|