第二周作业
问题:请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(High level modules shouldnot depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details. Details should depend upon abstractions)。其核心思想是:要面向接口编程,不要面向实现编程。
为了遵循该原则,我们在设计或编码时要注意:
对业务进行抽象,使调用方都是依赖接口,而不是依赖实现类。
变量的声明类型尽量是接口或者是抽象类。
任何类都不应该从具体类派生,除非是旧系统维护,要覆盖类的实现。
使用继承时尽量遵循里氏替换原则。
对于好莱坞原则(Dont call me, I'll call you),我更倾向于与“回调”近义。例如:打车的时候,你告诉司机你的目的地,司机到达目的地会告诉你,而不需要你定时不停问(轮询)司机:“有没有到目的地”。
依赖倒置和好莱坞原则相近的地方应该是:高层提供了一些接口,低层实现了接口。那么就是:低层不要问高层要不要用,高层需要的时候,会通过既定的接口调用低层的对象实例。
问题:请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
最熟悉的应该是Spring的Ioc容器,是通过依赖注入的方式实现依赖倒置原则的。通过一个中心容器管理对象,在运行时而非编译时绑定类间关系。
问题:请用接口隔离原则优化Cache类的设计,画出优化后的类图。
问题附图:
答案:
通过拆分接口,但是在一个类中实现的方式。
评论