尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

GoF设计模式——适配器模式

GoF设计模式——适配器模式
📅 发布时间:2026/8/1 8:18:47

h5打开以查看

为什么需要适配器模式?

写业务代码时经常碰到这种情况:项目里已经定义好了一个接口 PaymentGateway,所有支付都走它的 pay(orderId, amount) 方法;今天产品说要接入微信支付,打开 SDK 一看——微信用的是 unifiedOrder(body, outTradeNo, totalFee, ip),参数和方法名跟系统的接口对不上。

// 系统希望的调用方式 paymentGateway.pay("ORD001", new BigDecimal("99.9")); // 但微信 SDK 实际上长这样 wxPayApi.unifiedOrder("商品", "ORD001", 9990, "127.0.0.1"); // 单位是分

两种选择:把订单模块全部改成直接调微信 SDK,或者改微信 SDK 让它实现 PaymentGateway——前者一旦切换支付渠道就要重写业务代码,后者根本动不了第三方 SDK 的源码。

这种"现有的类"和"需要的接口"对不上的矛盾,就是适配器模式要解决的问题。

概念

适配器模式(Adapter Pattern)是一种结构型设计模式,核心思想是将一个类的接口转换成客户端期望的另一个接口,让原本不兼容的类能够协同工作。

适配器模式包含三个角色:

  • Target(目标接口):客户端期望使用的接口
  • Adapter(适配器):实现目标接口,内部持有被适配者,把目标接口的调用转换为被适配者的调用
  • Adaptee(被适配者):已有的类,其接口与目标接口不兼容,但功能正好是需要的

Adapter 实现 Target 接口并持有 Adaptee 实例,Client 只依赖 Target,完全不感知 Adaptee 的存在。Adapter 内部把 request() 翻译成 specificRequest(),参数和返回值的差异都在适配器里处理。

可以把适配器理解为电源转换头:新装的墙面插座只有两孔(系统期望的接口),家里的老电器是三脚插头(已有的、改不了的类),中间塞一个两脚转三脚的转换头——插座只看到两脚,老电器照样能用,"翻译"工作全在转换头内部完成。这个比喻贯穿后面的实现章节,方便对照理解。

实现

适配器模式有两种实现方式:对象适配器(组合)和类适配器(继承)。前者是 GoF 推荐方式,也是实际开发中最常用的;后者由于 Java 单继承限制,使用场景有限。

对象适配器

对象适配器通过组合实现:适配器实现目标接口,内部持有被适配者的引用,将调用委托给被适配者。

// 目标接口 public interface Target { public void request(); } // 被适配者 public class Adaptee { public void specificRequest() { System.out.println("Adaptee 的特定请求"); } } // 对象适配器:组合持有被适配者 public class Adapter implements Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void request() { adaptee.specificRequest(); } } // 客户端 Target target = new Adapter(new Adaptee()); target.request();

引入一个例子:「家里的两孔插座,要给一台三脚插头的老电器供电,买一个两脚转三脚的电源转换头,一头插进插座、

相关新闻

  • Beyond Compare授权问题解决方案:正版购买、评估期重置与开源替代
  • 麻辣烫选址哪家效果好? - 中媒介
  • 邢台市卫生间漏水怎么处理_2026冀南太行山东麓漏水维修流程教程与推荐 - 雨婺虹房屋维修

最新新闻

  • 4岁儿童声乐启蒙训练方法与工具推荐
  • 使用Cheat Engine修改《Eternium》游戏数据的原理与实践
  • MATLAB求解非线性方程:solve与fzero函数实战指南
  • 2026无锡下水道疏通维修靠谱机构榜单 马桶地漏积水反臭倒灌彻底解决攻略 - 宅安选房屋修缮
  • Linux 批量改密码神器:chpasswd 命令详解,批量重置用户密码超高效
  • 从原理到实践:电机控制技术全解析与FOC算法实现

日新闻

  • ClickHouse版本管理深度实战:4步构建零风险升级与回滚体系
  • Java 23 种设计模式:从踩坑到精通 | 番外:责任链模式 —— 物流审批流程实战
  • 华硕笔记本性能解放指南:G-Helper轻量级控制工具全面解析

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • ClickHouse版本管理深度实战:4步构建零风险升级与回滚体系
  • Java 23 种设计模式:从踩坑到精通 | 番外:责任链模式 —— 物流审批流程实战
  • 华硕笔记本性能解放指南:G-Helper轻量级控制工具全面解析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号