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 |
| 1247408032 | |
| 开源代码 | https://gitee.com/B_T/beimi |

浙公网安备 33010602011771号