训练营第二周作业
![训练营第二周作业](https://static001.geekbang.org/infoq/e9/e9d506ceaf929f93151cb3b89ee25d5e.jpeg)
作业一:
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置原则:
1.高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
2.抽象不应该依赖于具体,具体应该依赖于抽象。
![](https://static001.geekbang.org/infoq/d5/d5a54dec518c6e75a647018de518ed8b.png)
总之就是针对抽象接口或者抽象类编程,而不是具体实现。
为什么有时候依赖倒置原则又被称为好莱坞原则?
我理解书上的意思是:遵循依赖倒置原则使代码依赖高层接口和抽象,并由高层定义了接口,改变了依赖关系和接口所有权,所以符合“好莱坞原则”
我个人认为,"don’t call us, we’ll call you."强调的是改变以前使用 new 来静态组装对象的思想,而在运行时建立对象间的关系,提升代码扩展性。DIP强调的是通过对高层抽象的依赖,屏蔽具体实现之间的差异,从而使代码更稳定更容易扩展。DIP是“好莱坞”的基础,这俩没有可比性,所以问题不成立...还望助教老师斧正。
作业二:
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
如果只是依赖倒置的话,随处可见,比如 平时使用的jdbc,我们调用的是高层的jdbc抽象接口定义,而不会依赖具体的数据库driver实现。
如果说“好莱坞原则”的话:那么spring使用IoC思想,在运行时动态向bean中设置接口实例的做法算是一种实现;另外,dubbo使用ServiceLocator动态加载SPI实现类的方式也是在实现好莱坞原则。
作业三:
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
![](https://static001.geekbang.org/resource/image/9a/2c/9aec3589f51537014bed88ae21f0072c.png)
按照体面意思,如果只是为了分离职责的话,两个接口。限定CacheHandler的作用域,基本可以避免被非法调用。
![](https://static001.geekbang.org/infoq/92/92bcdd60ffaa156e62c38940ad2fb58b.png)
或者把维护Cache的功能从实现类中抽离到其它接口中,比如DefCacheManager
![](https://static001.geekbang.org/infoq/ba/ba58f011a80b9fe00ddcb3350f609d14.png)
评论