当前位置: 首页 > news >正文

1.适配器模式

概述

适配器模式:将一个类的接口转换成客户希望的另一个接口,使得原本不兼容的类可以一起工作。

适配器模式在业务场景中非常有用,尤其是在系统集成、接口兼容性处理以及代码复用等场景。以下是一个实际的业务场景示例:


业务场景:支付系统集成

假设你正在开发一个电商平台,需要集成多个第三方支付网关(如支付宝、微信支付、银联支付等)。每个支付网关的接口设计不同,但你的系统希望统一调用一个支付接口来处理所有支付请求。


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

业务场景总结

  1. 问题:第三方支付接口设计不一致,导致系统无法统一调用。

  2. 解决方案:使用适配器模式,为每个第三方支付接口创建一个适配器,将它们的接口转换为统一的 PaymentGateway 接口。

  3. 优点

    • 系统与第三方支付接口解耦,便于扩展新的支付方式。

    • 客户端代码只需调用统一的 PaymentGateway 接口,无需关心具体支付实现。

    • 符合开闭原则,新增支付方式时只需增加适配器,无需修改现有代码。


其他业务场景

  1. 日志系统集成:将不同日志框架(如 Log4j、SLF4J)适配到统一的日志接口。

  2. 数据格式转换:将不同数据格式(如 XML、JSON)转换为系统需要的格式。

  3. 旧系统升级:在新系统中复用旧系统的功能,通过适配器兼容旧接口。

适配器模式的核心思想是兼容性,它帮助我们在不修改现有代码的情况下,实现不同接口的协同工作。

相关文章:

  • Deepseek AI模型 快速入门(详细版)
  • YOLO11的单独推理程序
  • POST请求提交数据的三种方式及通过Postman实现
  • Python Matplotlib图形美化指南
  • 蓝桥杯备赛-精卫填海-DP
  • 2024年第十五届蓝桥杯青少 图形化编程(Scratch)省赛中级组真题——截取递增数
  • 自由学习记录(38)
  • Lecture 1 - AI Systems (Overview)
  • AI前端开发对就业机会的双面影响:机遇与挑战并存
  • YaRN论文解读
  • 哈希表_快乐数
  • 第438场周赛:判断操作后字符串中的数字是否相等、提取至多 K 个元素的最大总和、判断操作后字符串中的数字是否相等 Ⅱ、正方形上的点之间的最大距离
  • python闭包装饰器
  • 【Unity】鱼群效果模拟
  • jQuery CSS 类
  • 【C++设计模式】 单例设计模式:重要常用却并非完美之选
  • Infrared拼接融合
  • your HTTP request connection start duration too long
  • 后端之JPA(EntityGraph+JsonView)
  • AI驱动的自动化留给人类的时间不多了
  • 2人恶意传播刘国梁谣言被处罚,媒体:以法律利剑劈谣斩邪,加快推进依法治体
  • 上海市第二十届青少年科技节启动:为期半年,推出百余项活动
  • 上海天文馆走进徐家汇书院,XR沉浸式天文科普体验再推力作
  • 一旅客因上错车阻挡车门关闭 ,株洲西高铁站发布通报
  • 菲律宾中期选举结果揭晓,马科斯与杜特尔特家族重回“权力的游戏”
  • 首映|《星际宝贝史迪奇》真人电影,不变的“欧哈纳”