什么是控制反转呢,通俗点理解就是上层依赖下层的这种关系的扭转,让下层去依赖上层。
把下层作为参数传递给上层的构造函数,实现上层对下层的“控制”,而不是依赖。
好处就是降低耦合,提升代码的可维护性。
我们先来看一个上层依赖下层的例子。以设计一个行李箱为例。
底盘的尺寸依赖于轮子的大小,箱体的大小又依赖于底盘的大小。
若一开始轮子的尺寸是固定不变的。那代码就是如下所示。
那么随着功能迭代,现在有这样一个需求,轮子的尺寸必须是动态可替换的,那因为这样一种上层依赖下层的关系,轮子的设计一改变,那上层跟着都得改变,像这样,轮子的size需要从上层依次传递给下层的轮子类,每一个类都需要修改。
假如说有一个时间很久的老项目就是采用了这种设计,依赖关系的类多达几十甚至上百,一旦需要修改底层依赖,那我估计分分钟你想跑路了,毕竟头发重要。很难维护。
控制反转,化腐朽为神奇
那么我们接下来把依赖倒置,实现控制反转。如图:
那么此时,我们再来动态维护轮子的尺寸,需要做什么样的修改呢,如图,只需要修改轮子Tire类的设计即可