您好,登录后才能下订单哦!
这篇“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接口隔离原则实例分析”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。