依赖
- 什么是依赖,如果一个类中使用到了这样的代码 ,AutoDrive就依赖于Baoma。 AutoDrive 是高级模块,Baoma 是低级模块。
class AutoDrive{
Baoma car=new Baoma();
public void turnLeft()
{
car.turnLeft();
}
class Baoma{}
- 这样做的坏处是什么。类与类直接依赖与细节,那么他们之间就有耦合。当需要把宝马替换成奥迪时。我们又需要改动AutoDrive 的代码。
什么是依赖倒置
- 高层模块不应该依赖低层模块,两者都应该依赖于抽象。
- 抽象不应该依赖于细节,细节依赖于抽象。
实现
创建抽象:
interface Icar{
void turnLeft();
void turnRIght();
void GoStraight();
}
- 高级模块 如何依赖于抽象:采用依赖注入。
class AutoDrive{
private Icar mCar=null;
public void setCar( Icar car){
mCar=car;
}
public void turnLeft()
{
mCar.turnLeft();
}
}
class Baoma implements Icar{
@Override
public void turnLeft() {
// turn left
}
@Override
public void turnRIght() {
//turn right
}
@Override
public void GoStraight() {
// go straight
}
}