架构师训练营 - 第二周作业
1 请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置原则(Dependence Inversion Principle,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.
翻译过来,包含三层含义:
● 高层模块不应该依赖低层模块,两者都应该依赖其抽象;
● 抽象不应该依赖细节;
● 细节应该依赖抽象。
依赖倒置原则在Java语言中的表现就是:
● 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;
● 接口或抽象类不依赖于实现类;
● 实现类依赖接口或抽象类。
更加精简的定义就是“面向接口编程”——OOD(Object-Oriented Design,面向对象设
计)的精髓之一。
为什么依赖倒置原则又被称为好莱坞原则?
好莱坞原则:"不要给我们打电话,我们会给你打电话(don't call us, we'll call you)"
就是说在好莱坞,想进入好莱坞的人,不要找好莱坞,让好莱坞来找你! 把zhi简历递交给演艺公司后就只dao有回家等待。由演艺公司对整个娱乐项的完全控制,演员只能被动式的接受公司的差使,在需要的环节中,完成自己的演出。
依赖倒置原则中高层模块和底层模块就想好莱坞与演员一样,底层模块只需要实现高层模块的定义接口,被动的等待高层模块来调用接口的实现代码。
2 请描述一个你熟悉的框架,是如何实现依赖倒置原则的?
spring框架通过依赖自动注入实现依赖倒置原则的
在没有spring框架的web项目中, 需要在Controller类中主动创建service的具体对象,这样就产生了Controller层依赖service层,高层依赖于低层。而spring的IOC容器,可以自动注入依赖,这就使得Controller不需要依赖某个具体的service实现类,仅仅依赖service接口,IOC容器在Controller初始化的时候自动注入Service的某个实现。达到了Controller层与Service层的解耦。
3 请用接口隔离原则优化Cache类的设计,画出优化后的类图
优化后类图如下:
评论