架构师训练营 第二周 设计原则作业
作业一
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
什么是依赖倒置原则?
依赖倒置原则(DIP)在《敏捷软件开发》一书中的定义是:
1)高层模块不应该依赖于底层模块。二者都应该依赖于抽象。
2)抽象不应该依赖于细节。细节应该依赖于抽象。
用最简单的一句话描述就是:上层不依赖于下层,大家都依赖于接口。
什么是好莱坞原则?
著名的Hollywood原则是:"Don't call us , we'll call you" ,翻译过来是:请不要调用我们,我们会调用你。
这个原则阐述的是接口的所有权,体现了“倒置”的精髓,也是作为框架(framework)设计的核心原则,具体来说就是低层模块实现了高层模块中声明并且被高层模块调用的接口。
作业二
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
以SLF4j为例进行说明,虽然智慧老师说针对应用开发来说SLF4J属于工具,但是它本身是遵循了依赖倒置原则的。
SLF4j是Java简单日志门面,全称是Simple Logging Facade for Java,作为一个简单的门面和抽象,用于服务于各种各样的日志框架,如java.util.logging、logback和log4j。SLF4j允许最终用户在部署的时候集成自己想要的日志框架。简单来说,SLF4J是java日志的一个标准或规范,而以上的log4j、logback等是对该规范的具体实现。
在系统中我们在需要打日志的代码块中使用的是org.slf4j.Logger的接口,是上层模块的抽象,而系统中可以选择集成logback或者log4j,而这些修改仅仅只需要在java代码中把依赖进行替换即可,调用方代码无需做任何的修改,当然我们如果想要自己写一套个性化的日志框架,只要实现SLF4J,然后替换系统中的具体依赖即可,依旧无需修改任何一行代码,扩展性高。(当然,针对具体的实现框架会有其特殊的配置,这个由具体实现决定和SLF4J本身无关)。
作业三
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
图1 优化前的Cache类图
优化后的类图
图2 优化后的类图
版权声明: 本文为 InfoQ 作者【且听且吟】的原创文章。
原文链接:【http://xie.infoq.cn/article/ddb82f1da2b6a4bf41142109d】。未经作者许可,禁止转载。
评论