依赖倒置是指:高层模块不直接依赖于低层模块的具体实现,而是依赖于低层模块的抽象。
首先,依赖的本质是什么?
铁路局依赖于燃油局。
那么如果今天燃油局不存在了,会怎样?
答案是,铁路局的铁路、火车站还是原封不动在那里,只是不能正常运作了。
假如明天铁路局有人灵光一闪把火车接上蒸汽机头,联系上蒸汽动力局,铁路局就可以重新正常运作。
当前语境下依赖的本质应当是,如果铁路局依赖于燃油局,那么燃油局的消失会导致铁路局的存在不成立,而不是仅仅导致铁路局无法运作。
我们把铁路局和燃油局理解为两个各自独立运行的模块,铁路局是高层模块,燃油局是低层模块。
接着就可以推理出来,铁路局并不依赖于燃油局,他只是依赖于能给火车提供能量的服务。
因为如果真的不存在能给火车提供能量的服务了,铁路局就不存在了。
可能有人要说,既然能把燃油局换成蒸汽动力局,难道不能更彻底点,直接把火车换成飞机吗?
说得对,但那样就不叫铁路局,而是叫航空局。
如果把上面所说的给火车提供能量的服务理解为接口,燃油局和蒸汽动力局理解为该接口的两种实现。那么就可以得出:
高层模块不直接依赖于低层模块的具体实现,而是依赖于低层模块的抽象。