IoC控制反转基础入门
文章目录
参考:https://www.tutorialsteacher.com/ioc
作者本人在学习Ioc时,始终不理解IoC的本质什么,很多中文资料在我看来比较难懂,于是搜索英文资料,终于找到一篇比较浅显易懂的文章。原文代码是C#写的,本人用Java重写。
1. 简介
你可能听说过以下几个名词:
中文 | 英文 | 英文缩写 |
---|---|---|
控制反转 | Inversion of Control | IoC |
依赖倒转原则 | Dependency Inversion Principle | DIP |
依赖注入 | Dependency Injection | DI |
IoC容器 | Ioc Container | 无 |
但是你可能不清楚他们之间的区别。
如上图所示,IoC和DIP是处于上层的设计原则(Principle),也正因为是原则,所以没有提供具体的实现细节,这些原则是我们设计类时需要遵循的原则。DI是模式(Pattern),Ioc容器是框架(Framework)。
让我们先简单过一下上面的几个概念。
- 控制反转 IoC
IoC是一种设计原则,它建议在面向对象设计中反转(Inversion)各种控制(Control),以达到在类之间的松耦合(Loose Coupling)。在这里,控制更多指的是类的附加职责,而不是它的主要职责,比如控制应用的流程或控制所依赖类的创建和绑定。
- 依赖倒转原则 DIP
DIP同样可以达到类之间的松耦合,强烈建议同时使用IoC和DIP来达到松耦合设计。
DIP建议高层模块(high-level modules)不应该依赖低层模块(low-levle modules),两者都应该依赖抽象(abstaction, )。在java中,抽象指的是抽象类或者接口。
- 依赖注入 DI
DI是一种设计模式(Pattern),用来实现IoC,以达到反转依赖类的创建的目的。
- IoC容器
IoC容器是一种框架,用来管理应用程序中的自动依赖注入,因此我们程序猿可以节省体力。著名的spring中就提供IoC容器ApplicationContext。
下图所示,我们一步一步地学习从耦合类到松耦合类的设计过程。
强耦合类 -> 使用工厂模式实现IoC -> 通过创建抽象实现DIP -> 实现DI -> 使用IoC容器 - > 松耦合类。