一句话理解:适配器把已有对象的接口转换成调用方期望的接口,使原本不兼容的模块可以协作。
它解决什么问题
项目接入旧代码、第三方 SDK 或平台差异时,外部接口通常无法直接满足现有抽象。修改第三方代码风险高,改动所有调用方成本也大。适配器把转换集中在一个边界层。
Unity/C# 示例:统一输入接口
游戏逻辑只依赖自己的接口:
假设第三方输入插件提供不同命名的 API:
对象适配器通过组合完成转换:
角色控制器只认识
IPlayerInput,因此测试时也能替换成假输入:两种形式
- 对象适配器:组合被适配对象,灵活且最常用。
- 类适配器:通过继承转换接口,受 C# 单继承限制,也更依赖具体类。
适用场景
- 新旧输入系统并存
- 接入广告、支付、分析或存档 SDK
- 统一不同平台 API
- 给难以测试的静态接口包一层可替换抽象
与相近模式的区别
适配器的目标是接口兼容;外观模式的目标是简化复杂子系统;装饰器保持原接口并添加职责;代理保持原接口并控制访问。
注意事项
适配器应只负责协议和数据转换。若里面逐渐出现大量业务规则,应把业务逻辑移到独立服务中。外部 API 变化时,只需修改适配器边界。
小结
把第三方类型隔离在适配器之后,可以避免它们渗透整个项目。这不仅解决编译层面的不兼容,也保住了测试性和替换能力。