外观
接口、继承和多态怎样让实现可替换?
标准回答
接口定义“能做什么”,实现类决定“怎么做”;业务持有接口类型,通过多态调用不同实现。继承复用和扩展已有类型,但不应代替清晰的职责划分。
关键机制
- 设计 DeviceTransport 接口,可以有 BleTransport、WifiTransport 和 FakeTransport。上层无需知道底层连接细节。
- 通过构造参数注入依赖,方便替换和测试;实现约定应包含错误、取消、线程与资源释放行为。
- 优先用组合表达可替换部件,确实符合 is-a 关系和父类契约时再考虑继承。
通俗例子
设备页面只调用 DeviceRepository.loadDevices。真实运行使用网络实现,本地验证使用内存实现,页面与 ViewModel 不需要跟着改。
易混淆点
把一大坨方法搬进接口,不会自动变成好架构。接口仍应围绕单一职责,并避免泄漏具体协议细节。
参考资料
内容来源
- Android 技术札记 · 原条目
oop