依赖注入与控制反转_通俗比喻
文艺:
赤土神州浩瀚无边,其中的南胜州,永夜森林中有一个原始部落,他们每次打猎都会带回很多鸟蛋,蛋的大小被划分成大中小三种,每次他们只会采集一个型号的蛋。在回去部落前,他们会派出斥候,通知部落中管理器械的大司猎带回的是哪一种型号的蛋,大司猎会准备相应的放蛋的镂空木板,分大中小三种,对应每种木板会有相应的取蛋器。他会派人将这些木板和取蛋器集装在一个黑盒子中,运到部落门口,在那里早有部落中的少女们等着。
当勇士们(在这里我们不讨论掏鸟窝算不算勇士)回来之后,少女们就会打开黑盒子,将勇士们的蛋装进木板中。
1.少女们不关心拿来的是什么型号的木板,也不关心勇士们蛋的大小。事实上,她们要做的只是用取蛋器将蛋嵌在木板的孔洞上。
2.大司猎根据斥候的报告装箱相应的木板和取蛋器。
3.这些木板和取蛋器大同小异,都是工匠根据同一个 原始抽象构想 针对 实际情况 实现。
接口:为了解决每次装蛋的繁琐过程,部落中的人想到一种流程,将蛋放在一种带洞的板上卡住,他们创建了一个木板工具套的接口,命名为取蛋套装。
实现接口的类:大中小取蛋套装实际了取蛋套装这个接口,并且定义了工具使用的方法。
容器:容器(大司猎)决定注入哪种取蛋套装。
取蛋操作流:少女作为泛型类,她们事先并不知道会使用哪种取蛋器,只有到了现场她们才会自动使用容器中的方法和属性。
实际应用:勇士组织是整个流程的实际使用者,他们通知大司猎装箱,调用少女为他们装蛋……
伪代码表示:
接口:
public class Hero { Containerx con =new Containerx(); Virginity virg = con.setBean(); //输出"I am for BigEgg!" virg.sayYou(); }
龙觉寺CSDN_BLOG...原创...不总结永远一知半解,一知半解比无知更可怕