千家信息网

Java接口隔离原则实例分析

发表于:2024-10-01 作者:千家信息网编辑
千家信息网最后更新 2024年10月01日,这篇"Java接口隔离原则实例分析"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Ja
千家信息网最后更新 2024年10月01日Java接口隔离原则实例分析

这篇"Java接口隔离原则实例分析"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Java接口隔离原则实例分析"文章吧。

定义

接口隔离原则(Interface Segregation Principle),又称为ISP原则,官方定义为

1.客户端不应该依赖它不需要的接口

2.类间的依赖关系应该建立在最小的接口上

简单点来讲就是在一个类中不要定义过多的方法,接口应该尽量简单细化

案例

需求

假设有这样一个案例场景,现在有一个接口Repair,给定他有三个能力,可以修汽车,修火车,修飞机, 两个实现类张师傅,李师傅分别具有这些能力,有一个4S店类,假设是需要张师傅来修汽车和修飞机,而另一个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());    }}

对比分析

方案一,违反了接口隔离原则,因为李师傅和王师傅都实现了维修接口的三个方法:修汽车,修火车,修飞机。但需求中并不需要这么多,只需要李师傅修汽车和火车,王师傅修汽车和飞机,依赖关系不是建立在最小接口上

方案二,遵守了接口隔离原则,对李师傅和王师傅类都进行了接口隔离,实现了各自的两个方法,避免了耦合

以上就是关于"Java接口隔离原则实例分析"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

0