架构师训练营 - 第 2 周命题作业
1.请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
依赖倒置原则更像是一种你应该养成的编程习惯,它要求你面对接口编程。
例子:类A,类B,类C,都有相同的属性,相同的方法,然后都有可能被类H调用(高层调用低层),这样H类的实例如果调用这三个类,那么这个类H就和这三个类就发生了耦合,但是如果把这三个类抽取出一个接口I,类H调用I(面向接口编程),H就依赖于接口,A、B、C也依赖于接口。好处是,在这种情况下,类与类之间的耦合降低了,不依赖具体类而是依赖于接口。
好莱坞原则:“不要给我们打电话,我们会给你打电话(don‘t call us, we‘ll call you)”。
好莱坞原则是用在系统的高层组件与底层组件之间。高层组件不应该直接调用底层组件,而是从容器获取。
例子:假设qq在线聊天,有聊天框和表情选择框,那么,打开聊天框,然后打开表情框,选择表情——这个过程不应该在聊天框的代码里出现(或者说,聊天框不应该参与直接调用表情框),而是应该聊天框告诉qq容器:我要调用A,虽然我不知道那是什么,然后容器提供A(表情框组件)。好处是,假如之后腾讯更新了更好的表情框,然后由容器控制生命周期,而聊天框则不参与。
好莱坞原则定义接口倒转的层次依赖关系,跟依赖倒置原则同理相通。
2.请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
举例:spring框架定义好了拦截器接口,需要使用的时候我们需要遵循框架定义的拦截器接口,实现接口中的方法。典型的高层定义接口,底层根据高层定义好的接口来进行开发实现。
取自spring框架拦截器框架源码:
取自我们实现需要使用的拦截器代码:
配置在xxx.xml文件中进行使用
3.请用接口隔离原则优化Cache类的设计,画出优化后的类图。
Config:
ManagerCache:
GeneralCache:
GeneralAndManagerCacheImpl:
类图:
使用的时候,只开发两个接口单独开放,底层实现是两个cache的接口的方法都实现,需要使用这2个接口的时候都注入这个实现类的实例对象,这样就做到了接口隔离方法隔离。
版权声明: 本文为 InfoQ 作者【红了哟】的原创文章。
原文链接:【http://xie.infoq.cn/article/96a16e25bc4d1ae624c4590c5】。文章转载请联系作者。
评论