依赖反转(DIP)

依赖反转: Dependency Inversion Principle

高层模块不要依赖底层模块,高层模块和底层模块应该通过抽象相互依赖,抽象不要依赖具体细节,具体细节依赖抽象,调用层属于高层,被调用层属于低层,有点想基于接口而非实现编程,不是还是有点区别的,目的不一样

High-level modules shouldn't depend on low-level modules. Both modules should depend on abstractions. In addition, abstractions shouldn't depend on details. Details depend on abstractions.

控制反转

通过代码内方法或者属性控制if流程走向

控制反转框架

给if流程对象,预留拓展,通过框架来控制流程走向,并且实现自己的拓展

依赖注入

通过外部注入对象的初始化类自带的对象

依赖注入框架

通过框架生成对象并且控制对象的生命周期

“基于接口而非实现编程”跟“依赖注入”,看起来非常类似,那它俩有什么区别和联系呢?

区别:

1.依赖注入是一种具体编程技巧,关注的是对象创建和类之间关系,目的提高了代码的扩展性,我们可以灵活地替换依赖的类。

2.基于接口而非实现编程是一种设计原则,关注抽象和实现,上下游调用稳定性,目的是降低耦合性,提高扩展性。

联系:

都是基于开闭原则思路,提高代码扩展性!