概述
适配器模式:将一个类的接口转换成客户希望的另一个接口,使得原本不兼容的类可以一起工作。
适配器模式在业务场景中非常有用,尤其是在系统集成、接口兼容性处理以及代码复用等场景。以下是一个实际的业务场景示例:
业务场景:支付系统集成
假设你正在开发一个电商平台,需要集成多个第三方支付网关(如支付宝、微信支付、银联支付等)。每个支付网关的接口设计不同,但你的系统希望统一调用一个支付接口来处理所有支付请求。
1. 目标接口(统一的支付接口)
public interface PaymentGateway { void pay(double amount); }
2. 需要适配的第三方支付类
支付宝支付
public class Alipay { public void alipayPayment(double amount) { System.out.println("支付宝支付:支付金额 " + amount); } }
微信支付
public class WechatPay { public void wechatPayment(double amount) { System.out.println("微信支付:支付金额 " + amount); } }
3. 适配器类
支付宝适配器
public class AlipayAdapter implements PaymentGateway { private Alipay alipay; public AlipayAdapter(Alipay alipay) { this.alipay = alipay; } @Override public void pay(double amount) { alipay.alipayPayment(amount); // 调用支付宝的支付方法 } }
微信支付适配器
public class WechatPayAdapter implements PaymentGateway { private WechatPay wechatPay; public WechatPayAdapter(WechatPay wechatPay) { this.wechatPay = wechatPay; } @Override public void pay(double amount) { wechatPay.wechatPayment(amount); // 调用微信支付的支付方法 } }
4. 客户端代码
public class PaymentSystem { public static void main(String[] args) { // 创建支付宝适配器 PaymentGateway alipayGateway = new AlipayAdapter(new Alipay()); alipayGateway.pay(100.0); // 调用统一的支付接口 // 创建微信支付适配器 PaymentGateway wechatGateway = new WechatPayAdapter(new WechatPay()); wechatGateway.pay(200.0); // 调用统一的支付接口 } }
5. 输出
复制
支付宝支付:支付金额 100.0 微信支付:支付金额 200.0
业务场景总结
-
问题:第三方支付接口设计不一致,导致系统无法统一调用。
-
解决方案:使用适配器模式,为每个第三方支付接口创建一个适配器,将它们的接口转换为统一的
PaymentGateway
接口。 -
优点:
-
系统与第三方支付接口解耦,便于扩展新的支付方式。
-
客户端代码只需调用统一的
PaymentGateway
接口,无需关心具体支付实现。 -
符合开闭原则,新增支付方式时只需增加适配器,无需修改现有代码。
-
其他业务场景
-
日志系统集成:将不同日志框架(如 Log4j、SLF4J)适配到统一的日志接口。
-
数据格式转换:将不同数据格式(如 XML、JSON)转换为系统需要的格式。
-
旧系统升级:在新系统中复用旧系统的功能,通过适配器兼容旧接口。
适配器模式的核心思想是兼容性,它帮助我们在不修改现有代码的情况下,实现不同接口的协同工作。