beizili

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1、什么是依赖倒置原则?

总链接:https://blog.csdn.net/jjs15259655776/article/details/105619335

依赖倒置原则的意思是:

High level modules should not depend upon low level modules,Both should depend upon abstractions.Abstractions should not depend upon details.Details should depend upon abstracts.

翻译过来为:

  • 高层模块不应该依赖低层模块,两者都应该依赖抽象
  • 抽象不应该依赖细节
  • 细节应该依赖抽象

也可以说高层模块,低层模块,细节都应该依赖抽象

2、为什么要使用依赖倒置原则?

采用依赖倒置原则可以减少类间的耦合性,提高系统的稳定,降低并行开发引起的风险,提高代码的可读性和可维护性。其实也是一种实现开闭原则的方法。

3、怎么使用依赖倒置原则?

我们先来看一个例子。

public class Driver { 
    //司机的主要职责就是驾驶汽车
    public void drive(Benz benz){ 
        benz.run();
    }
}

public class Benz { 
    //汽车肯定会跑
    public void run(){
        System.out.println("奔驰汽车开始运行...");
    }
}

当我们要实现驾驶奔驰车时,只需要这么调用

public class Client { 
    public static void main(String[] args) { 
      Driver person = new Driver();
      Benz benz = new Benz();
      //开奔驰车
      zhangSan.drive(benz);
    }
}

看着很简单,但是问题来了,现在如果我们要实现“驾驶宝马车”的功能,是不是意味着我们要修改Driver类来实现。Driver作为一个高层,依赖传入进来的Benz类,这就是高层依赖底层,抽象依赖具体的问题

如何应用依赖倒置原则,更好地实现代码的架构呢?

首先,Driver的方法,不应该依赖具体的类:抽象类ICar作为参数,传入Driver里面:

public interface IDriver { 
    //是司机就应该会驾驶汽车 
    public void drive(ICar car); 
  
}

public class Driver implements IDriver {
  
    //司机的主要职责就是驾驶汽车
    public void drive(ICar car){ 
        car.run();
    }
  
}

而ICar作为抽象类不关心具体的实现。

public interface ICar { 
  
    //是汽车就应该能跑
    public void run();
  
}

具体的类有:

public class Benz implements ICar {
  
    //汽车肯定会跑
    public void run() {
        System.out.println("奔驰汽车开始运行...");
    }
}
  
public class BMW implements ICar{
  
    //宝马车当然也可以开动了
    public void run() {
        System.out.println("宝马汽车开始运行...");
    }
}

这样我们就可以实现"驾驶宝马车和驾驶奔驰车的功能":

public class Client {

    public static void main(String[] args) {

        IDriver person = new Driver();

        ICar benz = new Benz();
        Icar bmw = new BMW
        //开奔驰车
        person.drive(benz);
        //开宝马车
        person.drive(bmw);
    }

}

如果以后要再多一种车,就不需要修改Driver了,只需要新增一个ICar的实现类即可。

 

更多内容请关注微信公众号“外里科技

官方公众号外里科技
运营公众号英雄赚
微信wxid_8awklmbh1fzm22
QQ1247408032
开源代码https://gitee.com/B_T/beimi

 

posted on 2020-06-07 22:22  被子里  阅读(17)  评论(0)    收藏  举报  来源