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.
依赖倒置英文如上,高层次的模块不应当依赖于低层次的模块,它们都应当依赖于抽象。抽象不应当依赖于实现,实现应当依赖于抽象。
依赖分析
这个设计原则在模块设计中非常有用,我们分析一下其中的原理。
如果高层模块直接依赖于底层模块,那么当底层模块发生变化时,高层模块也需要紧跟修改。
而使用DIP原则,则:
image.png
高层模块通过注入使用接口,而底层模块使用接口,当底层模块变化时,高层和底层模块相对互相独立。并且可以随时替换新的底层模块。
DIP的实际应用
例如说我们的tomcat容器,tomcat和应用的关系,不是依赖关系,它们都依赖于sevelet规范这个抽象。
例如RPC协议,底 层协议模块依赖于接口,高层模块也依赖于接口,底层协议可以设计为TCP协议,也可以设计为UDP协议,根据使用场景高层模块选择不用的协议模块使用。
网友评论