依赖注入(DI-Dependency Injection)
什么是依赖注入
- 这是一种设计思想,一个面向对象的编程法则。
- DI能够让开发者写出低耦合代码,更加优良的程序。
- 更容易测试,代码健壮性更强。
- 它能使程序的整体结构变的非常灵活。
依赖注入的好处
举个例子
人和车的关系,人有开车的技能,但是他想要开车就必须先找一辆车过来。
public class Car {
public Car() {
}
public void run() {
LogUtils.i("启动汽车");
}
}
public class People {
private Car mCar;
public People() {
mCar = new Car();
}
public void driveCar() {
mCar.run();
}
}
通过这两段代码我们可以看出来,People类依赖于Car类,我们需要如何创建一个Car出来,还需要控制何时创建。这是我们传统的写法。如果我们用了DI框架,我们只需要告诉它我们的People类需要依赖一个Car类,具体如何创建Car,何时创建Car,我们并需要知道,通过这样的操作方式我们降低了代码的耦合度,同时也告诉我们为什么叫“依赖注入”,People依赖Car,而Car又需要DI框架将自己注入到People中。
生活中的例子
在饭店未诞生之前也就是人们吃饭需要自己做饭自己找食材
后来社会出现了饭店的概念人们想吃饭只需要去饭店然后点自己想吃的饭就可以了
在后来我们有了外卖的这个概念我们不需要知道饭店在哪里,我们需要吃饭的时候只需要掏出手机点一下就可以了。
分析下三种情况
1.你需要饭怎么做 食材需要自己找(被调用者必须出现在调用者代码里面,而且你还需要知道如何构造调用者)
2.你不需要知道饭是怎么做出来的 你只需要找到饭店即可。(你不需要知道调用者如何构造,但是你自己需要找到工厂。调用者与工厂类耦合在一起)
3.你不需要饭怎么做 也不用知道饭店在哪里 当你饿的时候打开外卖APP就可以了。
(系统调用)
依赖注入的方式
- 接口注入
- 构造方法注入
- Setter 注入
以上三种方式都很简单,但要在合适的时候调用合适的方式很难掌握,需要结合项目本身多加思考,才能灵活应用。
后面的文章将会介绍 Android 中的依赖注入框架 Dragger2