后端技术面试38讲
李智慧
同程艺龙交通首席架构师,前Intel&阿里架构师,《大型网站技术架构》作者
立即订阅
3799 人已学习
课程目录
已更新 22 讲 / 共 38 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 掌握软件开发技术的第一性原理
免费
软件的基础原理 (8讲)
01丨程序运行原理:程序是如何运行又是如何崩溃的?
02丨数据结构原理:Hash表的时间复杂度为什么是O(1)?
03丨Java虚拟机原理:JVM为什么被称为机器(machine)?
04丨网络编程原理:一个字符的互联网之旅
05丨文件系统原理:如何用1分钟遍历一个100TB的文件?
06丨数据库原理:为什么PrepareStatement性能更好更安全?
07丨编程语言原理:面向对象编程是编程的终极形态吗?
答疑丨Java Web程序的运行时环境到底是怎样的?
软件的设计原理 (12讲)
08丨软件设计的方法论:软件为什么要建模?
09丨软件设计实践:如何使用UML完成一个设计文档?
10 | 软件设计的目的:糟糕的程序员比优秀的程序员差在哪里?
11丨软件设计的开闭原则:如何不修改代码却能实现需求变更?
12 | 软件设计的依赖倒置原则:如何不依赖代码却可以复用它的功能?
13丨软件设计的里氏替换原则:正方形可以继承长方形吗?
14 | 软件设计的单一职责原则:为什么说一个类文件打开最好不要超过一屏?
15丨软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法?
16 | 设计模式基础:不会灵活应用设计模式,你就没有掌握面向对象编程
17 | 设计模式应用:编程框架中的设计模式
18 | 反应式编程框架设计:如何使程序调用不阻塞等待,立即响应?
19 | 组件设计原则:组件的边界在哪里?
不定期加餐 (1讲)
加餐 | 软件设计文档示例模板
后端技术面试38讲
登录|注册

15丨软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法?

李智慧 2019-12-25
我在阿里巴巴工作期间,曾经负责开发一个统一缓存服务。这个服务要求能够根据远程配置中心的配置信息,在运行期动态更改缓存的配置,可能是将本地缓存更改为远程缓存,也可能是更改远程缓存服务器集群的 IP 地址列表,进而改变应用程序使用的缓存服务。
这就要求缓存服务的客户端 SDK 必须支持运行期配置更新,而配置更新又会直接影响缓存数据的操作,于是就设计出这样一个缓存服务 Client 类。
这个缓存服务 Client 类的方法主要包含两个部分:一部分是缓存服务方法,get()、put()、delete() 这些,这些方法是面向调用者的;另一部分是配置更新方法 reBuild(),这个方法主要是给远程配置中心调用的。
但是问题是,Cache 类的调用者如果看到 reBuild() 方法,并错误地调用了该方法,就可能导致 Cache 连接被错误重置,导致无法正常使用 Cache 服务。所以必须要将 reBuild() 方法向缓存服务的调用者隐藏,而只对远程配置中心的本地代理开放这个方法。
但是 reBuild() 方法是一个 public 方法,如何对类的调用者隐藏类的公有方法

接口隔离原则

我们可以使用接口隔离原则解决这个问题。接口隔离原则说:不应该强迫用户依赖他们不需要的方法
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《后端技术面试38讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(6)

  • alex
    老师能加个代码么?自动锁门那块
    2019-12-25
    2
  • niuniu
    我觉得关键是合理的定义接口的粒度,实践中不同的场景可能同时需要用到同一个类的多个接口,还是要进行强转,让调用方很不爽。
    2019-12-25
    1
  • QQ怪
    又加深理解了,优秀
    2019-12-30
  • Paul Shan
    接口隔离原则感觉比较简单,依赖什么就只定义需要的接口,代价是相似的接口被定义好几份,可以用接口间的继承一定程度上消除重复代码。
    2019-12-29
  • Zend
    没想过,说实话 在写代码的时候太过于赶进度,没有对代码进行重构,更没有考虑到自己的设计的这个类如果方法都集中在一起不方便同事调用,让同事产生困惑。
    2019-12-27
  • 山猫
    接口隔离原则好是好,就是写着写着就发现接口越来越多,越来越多,甚至会超过本身类的数量,而且每个接口会只使用一次,这样不如直接用外观模式的IDE自动完成了。

    我现在用接口主要用于一些模型的规范性和方法参数规范性。如果需要文章中的功能,会拆开为两个类来写,而不是用两个接口加两个类。

    不知道我这种设计是否更好一些,或者这个真的和使用场景或项目大小吧。
    2019-12-25
收起评论
6
返回
顶部