• 请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
  • 请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
  • 请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。作业-week2 - 图1
    • 作业三提示:cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。

作业一

依赖倒置原则,原文描述为:

The principle states:[1]

  1. High-level modules should not depend on low-level modules. Both should depend on abstractions (e.g. interfaces).
  2. Abstractions should not depend on details. Details (concrete implementations) should depend on abstractions.

即高层次的模块不应该依赖于低层次模块,二者应该依赖于抽象;
抽象不应该依赖于具体实现具体实现应该依赖于抽象;

在调用链上,调用者是高层模块,被调用者是低层模块。依赖(depend)关系意味着被依赖方的改动会影响依赖方,通过抽象将二者隔离开来,能降低耦合性。

好莱坞原则,IOC(控制反转)Inversion of Control 又被称为好莱坞原则。

Hollywood Principle: Don’t call us, we’ll call you.

依赖倒置和好莱坞原则相同的是,都是高层定义,低层实现,高层在主导地位;倒转了层次的依赖关系;

作业二

Tomcat是运行Java Web的容器,我们编写的Web程序要部署在Tomcat容器下。Tomcat是高层模块,我们编写的应用程序是底层模块。Tomcat和应用程序直接并没有直接的依赖关系,两者都依赖于一个抽象,即Servlet规范。Servlet规范不依赖于Tomcat容器和应用程序的实现细节,而Tomcat容器和应用程序依赖Servlet规范。

作业三

  1. ![](https://cdn.nlark.com/yuque/0/2020/jpeg/757441/1592314797885-3af51aff-50f2-4950-938d-178e898c054e.jpeg#align=left&display=inline&height=570&margin=%5Bobject%20Object%5D&originHeight=570&originWidth=1878&size=0&status=done&style=none&width=1878)