[面试题] 适配器模式和装饰器模式有什么区别?
📖 版块 A:知识讲解版 (温故知新)
-
适配器模式:
- 目标是让原本接口不兼容的两个系统或类能够协同工作。
- 更关注“转换接口”。
-
装饰器模式:
- 目标是在不修改原始类的前提下,为对象动态增加功能。
- 更关注“增强能力”。
-
两者区别:
- 适配器解决的是“能不能接上”。
- 装饰器解决的是“功能能不能叠加”。
- 适配器通常强调兼容旧接口;装饰器通常强调增强现有行为。
🎤 版块 B:面试实战版 (高手逐字稿)
Q:适配器模式和装饰器模式有什么区别?
💬 高手逐字稿:
适配器模式和装饰器模式,虽然表面上都可能是“包一层对象”,但它们面对的问题完全不一样。
适配器模式解决的是接口不兼容问题。也就是说,老系统能提供某种能力,但它暴露出来的接口和新系统期待的接口对不上。这时候我们不想改老代码,就在中间加一个适配器,把旧接口翻译成新接口能接受的样子。
而装饰器模式解决的不是兼容问题,而是增强问题。原始对象本来就能用,只是我们想在不改它源码的前提下,再给它叠加一些新能力。
所以最简单的区分方式是:
- 适配器:本来接不上,现在把它接上;
- 装饰器:本来能跑,现在给它加点能力。
如果再落到实际语境里:
- 老 SDK 接口和你内部标准接口不一致,用适配器;
- 一个流对象想加缓冲、加编码、加统计,用装饰器。
所以这两个模式不要看结构像,就误以为可以互换,它们解决的是两类完全不同的设计问题。
最后更新于: