适配器模式通过新类实现目标接口并封装被适配者,核心角色为target(目标接口)、adaptee(老旧接口)和adapter(适配器);优先使用对象适配器(组合),通过字段映射、类型转换、字符串拆分等解决字段名、单位、结构不一致问题;多旧源时引入工厂统一创建适配器。

Java 中用接口实现适配器模式,关键不是让接口“自己适配”,而是通过一个新类去实现目标接口,并在内部对接老旧接口——这个新类就是适配器。它不改老代码,只做翻译工作。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
明确三个核心角色
适配器模式靠三部分协作:
• Target(目标接口):新系统依赖的接口,比如 UserInfo 或 PaymentService;
• Adaptee(被适配者):已存在的老旧类或接口,比如 OldUser 或 LegacyPayment,你不能动它;
• Adapter(适配器):一个新写的类,实现 Target 接口,同时持有 Adaptee 实例,把 Target 的方法调用“转译”成对 Adaptee 的调用。
优先选对象适配器(组合方式)
Java 不支持多继承,类适配器(继承 Adaptee + 实现 Target)受限大,实际项目中几乎都用对象适配器:
• 适配器类 实现 Target 接口,并 持有一个 Adaptee 类型的字段;
• 构造时传入老旧对象,所有方法都在内部做字段映射、单位换算、字符串拆分等转换;
• 例如老对象有 userName 和 balance(double 元),新接口要 getFullName() 和 getBalanceInCents(),适配器里就写 return oldUser.userName 和 return (int)(oldUser.balance * 100)。
处理典型不兼容点
老旧接口和新系统常在变量层面“说不到一块儿”,适配器要针对性解决:
• 字段名不同:把 oldUser.loginName 映射为 getUsername();
• 数据类型/单位不一致:double tempCelsius → int getTempFahrenheit(),内部乘 1.8 加 32;
• 结构嵌套错位:老接口返回 "北京|朝阳|建国路1号",新接口要 getProvince()、getCity()、getDetail(),适配器里用 split("\|") 拆解并返回对应段。
支持多个旧源时加一层工厂
如果不止一个老旧系统要接入(比如 LegacySystemA、LegacySystemB),别硬写多个适配器类再手动 new,而是引入简单工厂:
• 定义统一的适配器接口,如 UserAdapter;
• 各个具体适配器(AUserAdapter、BUserAdapter)都实现它;
• 工厂类根据来源标识(如 systemType = "A")返回对应适配器实例;
• 新系统只需面向 UserAdapter 编程,扩展新旧源时只加新适配器类和工厂分支,不改原有调用逻辑。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










