依赖反转是什么?到底谁被反转了?
试想一个生产多种披萨的工厂,如果工厂直接生产具体的披萨,那么每次添加新品种的披萨,我们都需要修改原来的工厂.
可如果我们创建一个抽象披萨,然后让工厂依赖抽象披萨.那么无论添加多少种披萨我们都不需要修改以前的代码.
原来的时候,工厂依赖于披萨,披萨变了,工厂就得跟着变,工厂被具体的披萨牵类着鼻子走.
可现在我使用了披萨接口,那么具体的披萨无论添加多少,都不会对披萨接口以及工厂产生影响,反倒是如果披萨接口改变了,那么具体的披萨也得跟着变.所以具体的披萨被披萨接口牵着鼻子走.
发现没,本来耀武扬威的具体披萨类说我就是世界的中心,也都得依赖我,听我的.可改完后,具体的披萨类不再有影响力,没人依赖他了(都依赖披萨接口了),反倒是所有的具体披萨类,都得听披萨接口的了(实现披萨接口).
我们从具体皮萨类的视角去看,是不是依赖的关系反转了!
依赖反转的遵顼的设计原则是: 依赖抽象!
程序设计时,我们要做到依赖抽象,而不是依赖具体.
我们原来的程序就是工厂依赖具体的披萨类.而现在我们在工厂和具体抽象类中加了一层抽象(披萨接口),完美的做到了依赖抽象.程序也就自然的实现了解耦.