训练营第二周作业
作业一:
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
低层模块进行具体逻辑的实现,高层模块调用低层模块,这是非常自然的,在实际代码编写中就会很自然的使得高层模块依赖低层模块.
有一个说法很有意思,变化将向依赖的反方向传递. 如果低层模块发生了变化,将会沿着依赖的反方向传递到高层.从而高层模块也发生相应的变化.除此之外,高层依赖低层,高层的可服用性也会降低.
依赖倒置有两个原则
1.高层不直接依赖低层,低层和高层应该都依赖与抽象
2.抽象不依赖于细节,细节应该以来于抽象.
第二点我觉得特别需要关注一下,有的时候,我们所谓的抽象其实是总结, 先是实现了一大堆的细节后,发现代码很多,有很多可以复用的地方,然后将其抽出来, 也许称其为总结会更合适. 总结的不好,可能细节一变,抽象又得变.
使用依赖倒置原则后, 高层就不直接依赖低层的实现了,而是高层根据需要,定义一堆抽象,来规范低层模块的行为,这样,只要抽象不变,底层的变化就无法传递到高层.
好莱坞原则---"don‘t call us, we‘ll call you". 在好莱坞,把简历递交给演艺公司后就只有回家等待。由演艺公司对整个娱乐项的完全控制,演员只能被动式的接受公司的差使,在需要的环节中,完成自己的演出。这种原则正好就是依赖倒置的体现.
作业二:
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
Spring中Bean的依赖注入就是依赖倒置的一种实现. 有个经典的问题,就是IOC和DI的区别,IOC控制反转,DI依赖注入是IOC的一种实现或者说应用.
在Spring中,我们只需要通过配置,就不需要自己手动进行Bean的实例化, 通过配置,就能让Spring实现各种Bean之间的依赖关系. 实现原理粗略的讲就是Spring中有个Bean的容器(一个大Map), 通过配置的元信息构建BeanDefinition, 实例化后就放入这个大Map中,当碰到依赖的时候,就从这个Map中取出依赖的Bean. 解决循环依赖则光有一个Map就办不到了
Spring中用这三个缓存来解决循环依赖.可以看下面这篇文章
https://blog.csdn.net/u010853261/article/details/77940767
作业三:
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
评论