第 2 周作业
作业一
题目:
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
答案:
依赖倒置原则,简称DIP,定义是:High level modules should not depend upon low level modules,both should depend upon abstractions.Abstractions should not depend upon details,details should depend upon abstractions.
DIP要求针对抽象编程,而不是针对实现编程,这是减少模块之间的依赖关系,构建松耦合的系统,产生可复用的面向对象设计的基本原则。
抽象指的是接口或者抽象类,高层模块抽象低层模块的服务,依赖抽象编程,而不是直接依赖低层模块,低层模块根据高层模块定义的抽象实现具体的细节,可以极大地减少模块之间的依赖关系。分层架构图如下所示:
好莱坞原则指的是don't call us,we will call you。它的含义是高层模块掌握应用的控制权,低层模块不要直接调用高层模块,高层模块负责调用低层模块。框架都是遵守好莱坞原则的,框架是应用的主体,我们遵守框架的约束,编写程序,这些程序由框架来调用。
这与DIP高层模块掌握主动权的原理是一样的,所以DIP有时候也被称为好莱坞原则。
作业二
题目:
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
答案:
一、springframework的生命周期回调机制
通过InitializingBean、DisposableBean、SmartLifeCycle等接口,我们可以自定义bean的初始化回调、bean的销毁回调、application context容器的启动或停止回调,这些接口是spring framework定义的,作为使用方,我们在程序中定义接口的实现,在容器启动时,会通过它内部的LifeCycleProcessor回调我们自定义的实现类。这符合面向抽象编程的原则,高层模块spring framework定义接口,低层模块(我们的程序)实现接口,两者都依赖接口,没有直接的依赖关系。
二、slf4j日志框架
日志使用方是高层模块,依赖slf4j框架中定义的接口,不依赖底层的日志实现框架(低层模块),只要日志实现框架实现了slf4j的接口,就可以被日志使用方使用,日志使用方可以方便地切换日志实现框架。
三、jdbc
jdbc封装了通过操作关系型数据库的接口,应用程序依赖jdbc接口编程,关系型数据库提供jdbc的驱动实现,两者都依赖jdbc,它们之间没有依赖关系。应用程序是高层模块,数据库驱动是低层模块。
作业三:
题目:
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
答案:
评论