在一本书上看到一个很好的例子,跟大家分享一下,相信有利于帮助初学者理解控制反转和依赖注入。
(1)原始社会中,劳动基本没有分工,需要斧子的人(调用者)只好自己去磨一把斧子,每个人拥有自己的斧子。如果大家把石斧改为铁斧,需要每个人都要学会磨铁斧的本领,工作效率极低。
【对应Java中的情形是】当调用者需要被调用者的时候,都必须得通过new来实现。类的耦合度极高,修改维护繁琐,效率极低。
(2)工业社会时,工厂出现,斧子不再由普通人完成,而由工厂生产,当人们需要斧子的时候,可以到工厂购买斧子,无需关心斧子是怎么制造出来的。如果废弃铁斧为钢斧,只需要改变工厂的制造工艺即可,制造工艺是由工厂决定的,工厂生产什么样的斧子,工人们就用什么样的斧子。
【对应Java中的情形是】当调用者需要背调用者时,可以使用工厂模式来创建被调用者。由于变化东西被封装到工厂,所以耦合度降低。但是调用者还是会和工厂耦合。
(3)近代工业社会,工厂蓬勃发展,人们需要什么斧子,只需要提供一个斧子图形,商家会按照你提供的图形将你的斧子订做好并送上门。
【对应Java中的情形是】Spring框架的依赖注入