知识卡片

面向接口编程的实践理由

普通读书笔记卡 · 1944.e

内容

以Order用List接口而非直接用ArrayList为例:Order依赖List接口、只用equals/add/get几个方法,实际连接对象是ArrayList实例,但Order无需知道这点。好处是换实现更容易——换成性能更好的List实现,不改Order任何逻辑代码,因lineItems类型声明是List而非ArrayList,只需改创建时那行初始化代码,这正是对接口而非实现编程原则的体现。

参考来源

- 位置:《UML精粹:标准对象建模语言简明指南(第3版)》第5章《类图:进阶概念》(源文件:_epub-src/EPUB/4.xhtml) - 结论依据:原文说明"通过使用接口,后面需要时更容易改变实现……通过对接口而不是对实现编程,如果需要一个List的不同实现,我不必改变所有代码",并指出"因为lineItems的类型声明为List,没有Order类的其他部分依赖于ArrayList"。 - 原始内容:为什么我不简单地避免这样做,让Order直接使用ArrayList?通过使用接口,后面需要时更容易改变实现……你应该总是尝试像这样对接口编程,总是使用你能用到的最通用的类型……因为lineItems的类型声明为List,没有Order类的其他部分依赖于ArrayList。