Week 02 命题作业
1. 请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
DIP概念:
依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。
简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
DIP要点:
a.高层模块不应该依赖于低层模块,两者都应该依赖于抽象。
b.抽象不应该依赖于细节,细节应该依赖于抽象。
一个DIP的简单例子:
依赖倒置可以应用于任何存在一个类向另一个类发送消息的地方。
采用依赖倒置原则改善的设计如下:
好莱坞原则:don’t call us, we’ll call you (别调用我们,我们会调用你)。
解释:
在好莱坞原则之下,我们允许低层组件将自己挂钩到系统上,但是高层组件会决定什么时候和怎样使用这些低层组件。换句话说,高层组件对待低层组件的方式是“别调用我们,我们会调用你”。
依赖倒置原则和好莱坞原则:
依赖倒置原则让我们尽量避免使用具体类,而多使用抽象。而好莱坞原则是用在创建框架或组件上的一种技巧,好让低层组件能够被挂钩进计算中,而且又不会让高层组件依赖低层组件。这两个原则的目标都是在于解耦,但依赖倒置原则更加注重如何在设计中避免依赖;好莱坞原则教我们一个技巧,创建一个有弹性的设计,允许低层结构能够互相操作,而又防止其他类太过依赖它们。
2. 请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
Spring框架中的控制反转(IOC)就是依赖倒置原则(DIP)的具体实现方式。
IOC为高、低层模块之间提供了抽象,就是说在系统中,被依赖对象(底层对象)不在依赖的模块中(高层模块)中直接创建对象,而是把创建对象的权利交给IOC容器来创建,然后再把对象交给依赖的模块使用。
在Spring 中提供的依赖注入(DI),就是IOC的一种重要实现手段,它将依赖的对象的创建权交给外部来处理,而不是在自身new出一个实例。
传递注入的方式有三种:
1、构造注入:利用构造方法进行注入
2、setter方法注入:在需要注入的类里提供一个setter方法进行注入
3、接口注入:因为具有代码侵入性,一般很少用,前2种居多
3.请用接口隔离原则优化Cache类的设计,画出优化后的类图:
评论