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

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

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

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

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

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


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

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

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

public class Driver {
    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中直接使用,不会影响已经写过的代码。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值