第二周

2020-06-18  本文已影响0人  yz08150

请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?

依赖倒置原则 Dependency Inversion Priciple DIP

怎么理解高层、低层模块,可以按数据流向来分析,数据来源是高层,数据接收者是低层,或者按照调用顺序区分,调用者是高层,被调用者是低层

通常而言,遇到的情况是 高层模块 A -> 调用低层模块 B 提供的接口的方法。
比如各种各样的库,都是这样,提供一个接口,然后用户调用这个接口对象的方法

现在,需要倒置过来,即 A 提供一个接口,然后在 A 中,A 主动的调用这个接口的方法,然后,低层 B 去实现 A中的接口,并且 A 持有 B 对象实现的接口的实例,这样的话,A 就可以自动的调用B实现的功能。也就是说,B现在依赖的是高层A提供的接口,而不是A去依赖B了

A : 持有接口 IA,并且其中调用 IA 的方法 funcA

B : implements IA

然后 A 持有 B 实现的 IA,这样的话,A 就可以 调用 IA.funcA()
A 不依赖 B,B也不依赖A,双方都只依赖 IA

另外的常见的例子,比如插件,软件提供了插件接口,用户可以实现各种功能的插件模块,软件会调用这个插件,以提供插件的功能

DIP 倒置了什么?

软件的层次化:

框架的核心 : 好莱坞规则 : Don't call me, I'll call you.
框架倒转了层次依赖关系

依赖倒置原则 和 好莱坞规则一致,低层不用调用高层,高层会在适当时机调用低层实现的高层接口方法

请描述一个你熟悉的框架,是如何实现依赖倒置原则的

spring 框架 使用了 依赖倒置原则

比如 ,Controller 的使用

spring 框架规定了 Controller 的定义方式,使用 @Controller 注解 ,以及 map方法的定义方式 使用 @RequestMapping 注解。
所以,用户只需要按照 spring 框架提供的方式,来实现自己的 bean,spring 就会在启动时,收集用户定义的 bean,并创建实例,然后在对应请求到来时,调用用户定义的 map 方法来处理请求

在整个过程中,spring 并不依赖 用户定义的接口类等,而只依赖spring本身定义的规则,而 用户,必需按照spring定义的方式来实现 spring 框架能运行的代码,也就是用户依赖 着spring框架。这也就是依赖倒置原则。

请用接口隔离原则优化 Cache 类的设计,画出优化后的类图

image.png image.png
上一篇下一篇

猜你喜欢

热点阅读