天天看点

六大设计原则——依赖倒置原则

名字很难理解,具体体现表现在三个方面

1:模块间的依赖通过抽象类发生,实现类之间不能发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。

2:接口或抽象类不能依赖于实现类。

3:实现类依赖接口或者抽象类。

简而言之就表现为“面向接口编程”,OOD。

可以用都很熟悉的司机开车案例来理解

很多时候为了加快速度,都会这么写:

司机类,有一个方法是开车drive,需要一辆宝马车

String name;
    public void drive(BaoMaCar mBaoMa){
        mBaoMa.run();
    }
}
           

宝马车,有一个方法是运行run。

public class BaoMaCar {
    public void run(){
        Log.e("fig","宝马开始行驶");
    }
}
           

执行

public class Env {
    public static void main(String[] args) {
        Driver mDriver = new Driver();
        mDriver.drive(new BaoMaCar());
    }
}
           

结果就是宝马车开始行驶,这样开发速度很快,

但是很不利于后续程序的扩展,你想,如果有一天司机大叔又买了辆奔驰呢?是不是不光要创建一个奔驰车类,还要修改司机类的构造。新增开车的司机也会有这种麻烦。所以我们可以根据第一条原则----模块间的依赖通过抽象类发生,实现类之间不能发生直接的依赖关系,对代码进行重新设计,如下:新增两个接口,司机和车,如下:

六大设计原则——依赖倒置原则

司机的接口

public interface IDriver {
    void drive(ICar mCar);
}
           

生产车的接口

public interface ICar {
    void run();
}
           

运行时:

public class Env {
    public static void main(String[] args) {
        IDriver mDriver = new LiSiDriver();
        mDriver.drive(new BaoMaCar());
        mDriver.drive(new BenChiCar());
        Log.e("fig","------------------------------");
        IDriver mDriver2 = new ZhangSanDriver();
        mDriver2.drive(new BenChiCar());
        mDriver2.drive(new BaoMaCar());
    }
}
           

运行结果如下:

六大设计原则——依赖倒置原则

这样就通过接口来实现了程序的可扩展性和易于维护性,遵循了依赖倒置原则,以后买了新车后只需实现ICar接口,就可以直接在Env中使用,而不必去修改司机类,同样,雇佣了新的司机只需实现IDriver接口,然后就可以在Env中直接使用,不会影响已经写过的代码。

继续阅读