架构师训练营 Week2 作业 1
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置原则的定义:
上层模块不应该依赖于底层模块,它们都应该依赖于抽象。
抽象不应该依赖于实现,而是实现依赖于抽象
意思就是在实现的过程中,我们应该针对某一类抽象进行编程,这样可以方便后续的扩展而不必修改当前的代码.
比如说:
拿鸭子叫的例子来说, 我们需要让鸭子叫,就要调用鸭子的 call 方法。现在有一个 whiteDuck, 让他叫则使用whiteDuck.call()
, 如果哪一天我们改成了 darkDuck, 则程序需要修改为darkDuck.call()
。这样的程序往往是不稳定的,太容易被改变。
而使用依赖倒置原则,抽象出一个 Duck, 让 whiteDuck\darkDuck 都实现 Duck, 在声明的时候不指定具体的类型,而是使用抽象类型, 这样在调用的时候, 程序会根据具体的运行过程去执行对应的鸭子叫声。
而好莱坞原则:don't call me. I will call you
可以理解为,A 是一个演员, B 是一个导演。
A 跟 B 说:我想演戏
B 跟 A 说:我目前也不知道有什么戏,也不知道什么系适合你。所以给我一张你的联系方式。有了我就联系你, 但是你不要联系我。
这就是好莱坞原则.
在某些时候,与依赖倒置原则很像,都是通过顶层向底层分配资源的过程。
请用接口隔离原则优化 Cache 的设计, 画出优化后的类图
内容: cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。
优化后的类图:
评论