4.谈谈你对 IOC的理解?

IOC 是 Inversion of Control 的缩写,多数书籍翻译成“控制反转”。简单来说就是把复杂系统分解成相互合作的对

象,这些对象类通过封装以后,内部实现对外部是透明的,从⽽降低了解决问题的复杂度,⽽且可以灵活地被重⽤

和扩展。IOC 理论提出的观点⼤体是这样的:借助于“第三⽅”实现具有依赖关系的对象之间的解耦。如下图:

 

由于引进了中间位置的“第三⽅”,也就是 IOC 容器,使得 A、B、C、D 这 4 个对象没有了耦合关系,⻮轮之间的传

动全部依靠“第三⽅”了,全部对象的控制权全部上缴给“第三⽅”IOC 容器,所以,IOC 容器成了整个系统的关键核

⼼,它起到了⼀种类似“粘合剂”的作⽤,把系统中的所有对象粘合在⼀起发ഀ作⽤,如果没有这个“粘合剂”,对象

与对象之间会彼此失去联系,这就是有⼈把 IOC 容器⽐喻成“粘合剂”的由来。  

把上图中间的 IOC 容器拿掉,然后再来看看这套系统:

 

现在看到的画⾯,就是我们要实现整个系统所需要完成的全部内容。这时候,A、B、C、D 这 4 个对象之间已经没有了耦合关系,彼此毫⽆联系,这样的话,当你在实现 A 的时候,根本⽆须再去考虑 B、C 和 D了,对象之间的依赖关系已经降低到了最低程度。所以,如果真能实现 IOC 容器,对于系统开发⽽⾔,这将是⼀件多么美好的事情,参与开发的每⼀成员只要实现⾃⼰的类就可以了,跟别⼈没有任何关系!

 

我们再来看看,控制反转(IOC)到底为什么要起这么个名字?我们来对⽐⼀下:

软件系统在没有引⼊ IOC 容器之前,对象 A 依赖于对象 B,那么对象 A 在初始化或者运⾏到某⼀点的时候,⾃⼰必须主动去创建对象 B 或者使⽤已经创建的对象 B。⽆论是创建还是使⽤对象 B,控制权都在⾃⼰⼿上。

软件系统在引⼊ IOC 容器之后,这种情形就完全改变了,由于 IOC 容器的加⼊,对象 A 与对象 B 之间失去了直接联系,所以,当对象 A 运⾏到需要对象 B 的时候,IOC 容器会主动创建⼀个对象 B 注⼊到对象 A 需要的地⽅。

 

通过前后的对⽐,我们不难看出来:对象 A 获得依赖对象 B 的过程,由主动⾏为变为了被动⾏为,控制权颠倒过

来了,这就是“控制反转”这个名称的由来。

posted @ 2021-08-12 15:54  RainsX  阅读(228)  评论(0)    收藏  举报