适配器模式(Adapter Pattern):第三方支付集成实战案例分析

肖哥弹架构 跟大家"弹弹" 业务中设计模式的使用

欢迎 点赞,点赞,点赞。

关注公号Solomon肖哥弹架构获取更多精彩内容

电商平台需要集成多种第三方支付服务(如支付宝、微信支付、PayPal等),这些支付服务的API接口和交互方式各不相同。为了使系统能够无缝集成这些支付服务,同时保持代码的整洁和可维护性,适配器模式提供了一种有效的解决方案。

2. 为什么要使用适配器设计模式

适配器模式允许我们将第三方支付服务的特定接口转换为系统需要的通用接口,从而使得代码对第三方服务的依赖降到最低,提高了系统的可扩展性和可维护性。

3. 标准适配器设计模式图

4. 业务适配器设计模式图

5. 业务代码参考

java 复制代码
//定义统一的支付接口
public interface PaymentService {
    /**
     * 执行支付操作
     * @param amount 支付金额
     * @param platform 支付渠道
     * @return 支付结果
     */
    String pay(double amount, String platform);
}

//支付宝支付适配器
public class AlipayAdapter implements PaymentService {
    private AlipayAPI alipayAPI = new AlipayAPI();
    
    @Override
    public String pay(double amount, String platform) {
        // 构建支付宝支付请求
        AlipayRequest request = AlipayRequest.builder()
                                .setAmount(amount)
                                .setPlatform(platform)
                                .build();
        // 调用支付宝API执行支付
        return alipayAPI.sendPayment(request);
    }
}

class AlipayAPI {
    public String sendPayment(AlipayRequest request) {
        // 与支付宝服务交互的逻辑
        return "支付宝支付成功,金额:" + request.getAmount();
    }
}


//微信支付适配器

public class WeChatPayAdapter implements PaymentService {
    private WeChatPayAPI weChatPayAPI = new WeChatPayAPI();
    
    @Override
    public String pay(double amount, String platform) {
        // 构建微信支付请求
        WeChatPayRequest request = WeChatPayRequest.builder()
                                .setAmount(amount)
                                .setPlatform(platform)
                                .build();
        // 调用微信支付API执行支付
        return weChatPayAPI.initPayment(request);
    }
}

class WeChatPayAPI {
    public String initPayment(WeChatPayRequest request) {
        // 与微信支付服务交互的逻辑
        return "微信支付成功,金额:" + request.getAmount();
    }
}

//PayPal支付适配器

public class PayPalAdapter implements PaymentService {
    private PayPalAPI payPalAPI = new PayPalAPI();
    
    @Override
    public String pay(double amount, String platform) {
        // 构建PayPal支付请求
        PayPalRequest request = PayPalRequest.builder()
                                .setAmount(amount)
                                .setPlatform(platform)
                                .build();
        // 调用PayPal API执行支付
        return payPalAPI.executePayment(request);
    }
}

class PayPalAPI {
    public String executePayment(PayPalRequest request) {
        // 与PayPal服务交互的逻辑
        return "PayPal支付成功,金额:" + request.getAmount();
    }
}


//使用适配器执行支付 (业务中可以根据工厂模式集合)
public class ECommercePaymentProcessor {
    public static void main(String[] args) {
        PaymentService alipayService = new AlipayAdapter();
        PaymentService weChatService = new WeChatPayAdapter();
        PaymentService payPalService = new PayPalAdapter();
        
        // 调用不同支付服务执行支付操作
        String alipayResult = alipayService.pay(100.0, "Alipay");
        String weChatResult = weChatService.pay(200.0, "WeChat");
        String payPalResult = payPalService.pay(300.0, "PayPal");
        
        // 输出支付结果
        System.out.println(alipayResult);
        System.out.println(weChatResult);
        System.out.println(payPalResult);
    }
}

6. 使用适配器设计模式的好处

适配器模式解决了以下问题并带来了以下好处:

  • 解耦:系统与第三方支付服务的实现细节解耦。
  • 扩展性:新增支付方式时无需修改现有代码。
  • 复用性:第三方支付服务的代码可以在多个项目中复用。

7. 其他使用适配器设计模式场景参考

适配器模式适用于需要集成不同系统或服务的场景,例如:

  • 不同数据库的访问抽象:统一不同数据库的访问接口。
  • 硬件设备的控制:统一不同厂商设备的控制接口。

8. 可参考开源框架

  • Spring Framework:在Spring中,JdbcTemplate等数据库访问类使用了适配器模式来适配不同的数据库驱动。

总结

适配器模式提供了一种将第三方服务或旧系统与新系统集成的有效方法。通过定义一个统一的接口,适配器模式隐藏了第三方服务的具体实现细节,使得系统更加灵活和易于维护。

相关推荐
测试开发Kevin1 小时前
小tip:换行符CRLF 和 LF 的区别以及二者在实际项目中的影响
java·开发语言·python
笨手笨脚の1 小时前
Redis: Thread limit exceeded replacing blocked worker
java·redis·forkjoin·thread limit
Lenyiin1 小时前
Linux 基础IO
java·linux·服务器
松☆1 小时前
Dart 核心语法精讲:从空安全到流程控制(3)
android·java·开发语言
编码者卢布2 小时前
【Azure Storage Account】Azure Table Storage 跨区批量迁移方案
后端·python·flask
编码者卢布2 小时前
【App Service】Java应用上传文件功能部署在App Service Windows上报错 413 Payload Too Large
java·开发语言·windows
q行2 小时前
Spring概述(含单例设计模式和工厂设计模式)
java·spring
好好研究3 小时前
SpringBoot扩展SpringMVC
java·spring boot·spring·servlet·filter·listener
毕设源码-郭学长3 小时前
【开题答辩全过程】以 高校项目团队管理网站为例,包含答辩的问题和答案
java