接口隔离原则
目的: 实现接口的客户端不应该实现或依赖它不需要的方法
举个例子
有如下一个大的接口 Interface1,其中分别有三个方法
- power(): void // 动力
- rotate(): void // 旋转
- gear(): void // 换挡
现在我们只需要一个发动机、一个轮胎、一个变速箱造一辆汽车。分别是
Engine.java implements Interface1 // 发动机
Gearbox.java implements Interface1 // 变速箱
Wheel.java implement Interface1 // 轮胎
如果按这个方式去实现这个类,那么他们三个类中都将需要实现他们并不需要的方法。
发动机,它只需要输出动力,它不能旋转,也不能换挡
变速箱,它只需要换挡,它不能输出动力,也不能旋转
轮胎,它只需要旋转,他不能输出动力,也不能换挡
这样去做,那造出的车,就多了很多不必要的功能,增加了它的难度,也增加了复杂度
这时候就需要用到接口隔离原则。
我们只需要将这个 Interface1 接口拆分成三个接口,分别是
Engine 发动机
public interface Engine {
/**
* 输出动力
* @return 动力
*/
int power();
}
Gearbox 变速箱
public interface Gearbox {
/**
* 切换档位
* @return 档位
*/
int gear();
}
Wheel 轮胎
public interface Wheel {
/**
* 旋转
* @return 旋转速度
*/
double rotate();
}
三个接口都实现好了,我们只需要车子实现了这三个功能,那么这辆车的模型就算是建造完了
Car 汽车模型
public class Car implements Engine, Gearbox, Wheel{
@Override
public int power() {
return 3000; // 输出动力
}
@Override
public int gear() {
return 5; // 切换档位
}
@Override
public double rotate() {
return power() / gear() * 0.16; // 档位切换后轮胎的转速
}
public double speed() {
return rotate(); // 行驶的速度
}
}
创造汽车
/**
* 接口隔离原则
*/
public class Main {
public static void main(String[] args) {
Car car = new Car();
System.out.println("汽车动力: " + car.power());
System.out.println("汽车档位: " + car.gear());
System.out.println("汽车速度: " + car.speed());
}
}
网友评论