架构师 0 期 | 设计模式练习
作业一:
请描述什么是依赖倒置原则,为什么有时候依赖倒置原则又被称为好莱坞原则?
依赖倒置原则(DIP)
上面说到框架是定义规范的,我们开发过程中用到的比如Spring、Mybatis、Tomcat、Jetty等框架都是这么做的,使用者无需调用他们的方法,就能使用他们的功能。
是不是很神奇,核心关键就是使用到了依赖倒置原则。
依赖倒置原则定义
高层模块不应该依赖底层模块,二者都应该依赖抽象。
抽象不应该依赖具体实现,具体实现应该依赖抽象。
软件高层指的是方法调用方。
针对一个项目来说,值钱的地方在高层,即业务层。这些功能实现了公司的核心业务。
传统的软件写法是,底层方法库实现一个功能,供高层调用。这样做有一个弊端是,当底层技术变更,比如更换数据库等,高层的业务层就得修改,牵一发动全身。
使用依赖倒置原则,可以开发出依赖更少,低耦合,可复用的代码。
关键是接口所有权的倒置
高层模块定义一个抽象接口,低层模块去实现这个接口。
高层模块通过抽象接口使用低层模块。
接口的所有权被倒置的,接口所有权归高层,低层去实现。
即调用方制定接口,低层实现。
如果低层更换,只需实现接口即可,高层无感。
实现高层模块复用
而且高层模块也增加了复用性,不依赖低层。
高层提供抽象接口,当有类似的功能时,可以复用高层代码,只需实现高层提供的接口,则可以复用高层代码,并可根据实际情况实现不同效果的。
好莱坞原则
Don't call me, I will call you.
不要来调用我,我会调用你。
即不用主动调用我,当需要的时候,我自动会调用你,来通知到你。
作业二:
请描述一个你熟悉的框架,是如何实现依赖倒置原则的。
iOS中代理模式
比如最常用的UIKit中的UITableView,提供了接口,面对不同列表样式时,只需要实现对应的代理就可以。
面向接口编程。
作业三:
请用接口隔离原则优化 Cache 类的设计,画出优化后的类图。
作业三提示:cache 实现类中有四个方法,其中 put get delete 方法是需要暴露给应用程序的,rebuild 方法是需要暴露给系统进行远程调用的。如果将 rebuild 暴露给应用程序,应用程序可能会错误调用 rebuild 方法,导致 cache 服务失效。按照接口隔离原则:不应该强迫客户程序依赖它们不需要的方法。也就是说,应该使 cache 类实现两个接口,一个接口包含 get put delete 暴露给应用程序,一个接口包含 rebuild 暴露给系统远程调用。从而实现接口隔离,使应用程序看不到 rebuild 方法。
版权声明: 本文为 InfoQ 作者【刁架构】的原创文章。
原文链接:【http://xie.infoq.cn/article/261480e03ca72593acdff6118】。文章转载请联系作者。
评论