第二周作业
作业一
依赖倒置原则(Dependecy Inversion Principle)的定义如下:
A、高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象 — 模块间的依赖通过抽象发生,具体实现类不发生直接的依赖关系
B、抽象不应该依赖于具体的实现,具体的实现应该依赖于抽象 — 面向接口编程
依赖倒置原则基于这样一个事实:相对于细节的多边形,抽象的东西要更加稳定,以抽象为基础搭建起来的架构比以细节为基础搭建起来的架构要稳定的多,具体的实践方式就是在于相对于依赖具体实现类,我们应该去依赖抽象,无论是模块之间的依赖还是类之间的依赖,由原来对具体实现类的依赖转变为对抽象、对接口的依赖,这样做的好处是可以把类之间的耦合降低,使得设计更加灵活。
好莱坞原则的定义如下:
"don’t call us, we’ll call you”,也就是说所有的组件都是被动的,所有组件的初始化和调用都由容器来负责,组件处在一个容器当中,由容器负责管理。也就是由容器来控制程序组件之间的关系,而非传统实现中,由程序代码直接操控,这个也就是“控制反转”的概念,控制权由应用代码中转到了外部容器,控制权的转移,就是所谓的反转。
而好莱坞原则是需要组件之间进行抽象/接口的依赖,然后由容器负责进行组件之间关系的组装。跟依赖倒置原则中依赖接口的原则比较相似,所以依赖倒置原则又被称为好莱坞原则;
作业二
作为Java开发者,Spring框架应该是我们进行web开发的时候最常用的框架之一,而Spring框架最重要的一个特性就是IOC(控制反转),而IOC就是依赖倒置原则的一种代码设计的思路,Spring中具体是采用了DI(依赖注入)的方式实现的,各概念的关系如下图:
在我们平时开发一个功能模块需要使用到多个对象协作完成,此时我们的做法是在A对象需要B对象协作时,主动去创建B对象 — new B(),B对象是由A对象自己主动创建出来的,此时B对象的主动权和创建时机就由A对象自己把控,而且同时也导致了对实现类B类的依赖,违反了依赖倒置原则,A和B对象就耦合在一起了。
在使用Spring的IOC容器功能,创建合作对象的工作由Spring来做,A只需要去依赖B的接口IB,Spring容器在初始化A容器的时候,发现A对象需要依赖接口IB的时候,此时就去创建对象IB的具体类B,然后把该具体类B交给A对象使用即可。A无需去关心B对象的创建和销毁。
IOC很好的体现了“好莱坞原则” — “别找我们,我们找你”,即由容器帮对象找相应的依赖对象并注入,而不是由对象自己去主动找。
作业三
应该让Cache实现CacheOperator和CacheManager两个接口,这两个接口有不同的职责:
CacheOperator接口的职责为缓存的增删改查,就是对缓存的客户端层面操作,作为暴露给应用程序;
CacheManager接口的职责是缓存的系统管理和维护,是作为暴露给系统远程调用;
如下图:
评论