架构师训练营 第二周【作业】
作业一:请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置:
高层模块不应该依赖低层模块,二者都应该依赖其抽象;
抽象不应该依赖细节,细节应该依赖抽象。
好莱坞原则:
别调用我,我来调用你。
依赖倒置需要抽象,而好莱坞原则,也是需要抽象层发挥多态,才能实现被动的调用,所以从实现方式上来看,两者就像是是一回事。
如此设计,不但能起到解耦的作用,使得代码更加灵活易扩展,而且,大大增强了对于代码的控制力。
作业二:请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
拿很早的 SpringMVC 框架举例,里面使用依赖倒置原则的设计很多,比如拦截器功能 Interceptor 的实现。框架定义了如下接口 HandlerInterceptor:
我们需要使用拦截器,只需要实现以上接口,并实现 3 个方法,配置好拦截位置并入 Spring 管理即可。当框架运行到需要拦截的位置时,框架会自动调用该接口,从而我们实现的拦截器也会被调用,而达到拦截的目的。可见代码十分容易扩展。
作业三:请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
使用接口隔离的方式,一个实现类分别实现两个接口,如下图:
如此设计,就可以在不同的应用场景下,声明不同的接口使用,可以避免暴露所有接口而导致的安全问题。
评论