理解依赖注入与松耦合
# 耦合
耦合就是一个类依赖于其他的类才能完成其功能。 耦合具有两面性,一个方面是难以测试,难以复用和难以理解,另外一个方面是我们却不得不耦合,完全没有耦合的代码几乎啥都干不了。 所以耦合是必须的,但是必须得好好管理可以。
# 松耦合
先来看看耦合的 例子1-1
public class ChiFan{
private Kuaizi kuaizi;
ChiFan(){
this.kuaizi=new kuaizi();
}
public void eat(){
this.kuaizi.eat();
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
吃饭需要用到筷子,所以吃饭之前必须得有个筷子,但是吃饭不一定得用筷子,也可以用叉子等等。 这个时候如果要改成叉子就需要改变代码了,这个时候就体现了耦合性得缺点。
再看看松耦合的 例子1-2
public class ChiFan{
private Tool tool;
ChiFan(Tool tool){
this.tool=tool;
}
public void eat(){
this.tool.eat();
}
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
这里可以看到我们使用接口Tool来当作参数,要吃饭必须给一个吃饭的工具才行,而这个工具是可以有多种实现,可以用筷子实现也可以用叉子实现,这里也体现了多态性。
# 依赖注入(DI)
依赖注入的思想与传统的做法不同在于
- 传统做法是每个对象自己管理自己需要的相互协作的对象,如同例子1-1那样,在自己里面直接new一个出来。
- 依赖注入就是这个对象去请求要一个这样的对象才能完成工作,这个依赖对象可以set方法进来的也可以是构造方法进来的,一般推荐使用构造方法进来,因为你这个对象没了那些依赖对象无法进行工作,所以如果没有这些依赖对象直接不能创建类的实例才是。一句话概括就是依赖注入会将依赖关系的关系自动交给目标对象,而不是是自己去获取依赖。
在 GitHub 编辑此页 (opens new window)
上次更新: 2024/02/25, 12:11:11