构建出的抽象会以接口(此处接口不一定是个语法,而是一个类型的约束)体现。所以,本文讨论的多态范畴内,接口、抽象类、父类等概念等价,统一称为接口。
接口隔离了变化部分、不变部分
- 不变部分
接口的约定
- 变化部分
子类各自的实现
最影响程序的就是各种变化。有时需求来了,你的代码就得跟着改,一个可能的原因就是各种代码混在了一起。
比如,一个通信协议的调整,你要改业务逻辑,这明显不合理。
所以识别出变化与不变,是区分程序员水平的一大标准。
接口是边界
清晰界定系统内不同模块的职责很关键,而模块间彼此通信最重要的就是通信协议,对应到代码中的接口。
很多程序员在接口中添加方法很随意,因为他们眼里,不存在实现者和使用者的角色差异,导致没有清晰边界,后果就是模块定义随意,彼此之间互相耦合,最终玩死自己。
所以,理解多态在于理解接口,理解接口在于谨慎选择接口中的方法。
面向接口编程的价值就源于多态。
这些原则你可能都听说过,但写代码时,就会忽略细节。
比如: