这篇“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接口隔离原则实例分析”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注天达云行业资讯频道。