依赖倒置和接口隔离
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则
依赖倒置原则
上层模块不应该依赖底层模块,应依赖于抽象。
抽象不应该依赖于细节,细节应该依赖于抽象。
好莱坞原则:don't call us, we'll call you
别调用我们,我们会调用你。
高层组件不应该直接调用底层组件,而是从容器获取。
应用:模板方法模式,模板方法类对它的子类说: 不要调用我们,我们会调用你。
请描述一个你熟悉的框架,是如何实现依赖倒置原则的
web 容器规范:tomcat、jetty、weblogic 等都遵循 web 容器规范,应用程序中必须包含 WEB-INF 目录,web.xml 文件等。
servlet 规范:应用实现 Servlet 接口就能处理响应的 web 请求。
jdbc 规范:mysq、oracle 连接数据库驱动都是面向 jdbc 接口编写。
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图
put get delete 提供给内部应用使用。
rebuild 提供给外部管理用,可通过传入 conf 动态切换是内部缓存还是外部缓存,外部缓存可修改对应的集群地址。
cache 通过 conf 知道通过代理知道通过哪个缓存获取数据。
类图如下:
RedisCahe、LocalCache 为底层缓存的实现。
CacheProxy 持有一个或者多个 cache 对象(可保证当前生效的为一个)。
Cache 本身自己不实现缓存能力,通过 CacheProxy 可获取当前实现缓存的对象,并通过该对象提供缓存的能力,也可通过 reBuild 方法切换缓存的实现或重新初始化缓存实现对象(Cache 本身也可作为 CacheProxy)。
CacheServiceImpl 提供能力给内部应用使用,CacheManangerImpl 提供远程服务来管理相应缓存实例。
评论