简单解释什么是 依赖注入 和 控制反转
关于 依赖注入
与 控制反转
的概念有些人觉得很难理解,最近在给别人讲这个概念的时候梳理了一个比较好理解的解释,而且我认为非技术人员也应该能听的懂,因此分享给大家,希望下次你在给别人讲的时候也能讲的明白。
其实 依赖注入
和 控制反转
说的是同一件事情,只是站的角度不同而已。
我们就拿超人和小怪兽的事情来做类比对象。
地球受到了威胁,不断有小怪兽来想要破坏地球,每来一个小怪兽我们就需要找一个超人去对付他,一个超人肯定是不够的,因为每次来到小怪兽都是不一样的,他们所具有的能力也是不一样的。
因此我们必须找到合适的超人去对付他,最坏的情况是每来一个小怪兽我们就要找一个或者制造一个新超人,那么来十个小怪兽,我们就要制造十个,来百个就要制造百个,来千,来万,来亿我们就要制造相应的超人,而大部分超人只能用一次。
为了解决这个问题我们引入依赖注入和控制反转的概念,我们将超人和超能力分开,独立的超人和独立的超能力,当一个小怪兽来的时候我们找到超人,将相应的超能力给予他,让他去消灭小怪兽。
这样的话我们只需要几个超人就好了,我们不再需要制造超人,而是研究如何制造更多更好的超能力给超人使用。
超能力和超人不再是强依赖关系。超能力是由外部给予超人的,超人和超能力有依赖,但是这个依赖是外部给予,因此我们可以说超能力是由外部注入给他的,所以这就叫 依赖注入
。
而反过来说,超人具有何种超能力不是他内部自身控制的,而是由外部控制的,相当于将超能力具有何种功效交给了外部,外部来决定超人该有的超能力,所以超能力的控制权被由自身控制反转为外部控制,这被称为 控制反转
。
这就是关于 依赖注入
和 控制反转
的我的比较好理解的解释。它能较好的解决对象与对象之间的强耦合问题,同时也能做的按需使用按需加载。
顺便说一下,钢铁侠和蝙蝠侠更受欢迎的原因我认为就是因为他们的超能力是外部给予的,而非自身的,因此可以不断有新的超能力给他们使用,因此也更有看点和新鲜感。
本作品采用《CC 协议》,转载必须注明作者和本文链接
通俗易懂~
哈哈,才在掘金看完,这里又看了一次。
@fatrbaby 是的,我在掘金也发了?
@YuxiangDong 写得很好
@fatrbaby 嘻嘻,谢谢表扬
栗子举得不错,要是最后能来个映射,告诉大家在实际应用中超人就是 Interface,超能力就是一个乃至多个具体实现,感觉就更好啦
这篇文章似曾相识,Inspirer博客那边有篇完整的,文章地址
@ab0029 是的,我就是看了他的转化成自己的理解写出来的,而且主要目标受众是不是很懂技术的人。
很好,但是怎么用这个?
的确不错,看过很多,你这种比喻就很容易理解。配合代码 就更完美了。
在laravel中外部可以理解为容器