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

适配器模式 (Adapter Pattern)

适配器模式 (Adapter Pattern)

适配器模式是一种结构型设计模式,用于解决两个不兼容接口之间的兼容性问题,充当两个不同接口之间的桥梁。

🌟 核心思想

转换接口:将一个类的接口转换成客户端期望的另一个接口,使原本不兼容的类能够协同工作。

🧩 模式结构

组件说明
Target客户端期望的目标接口
Adaptee需要被适配的已存在类(不兼容的类)
Adapter适配器类,实现 Target 接口并包装 Adaptee 对象
Client使用 Target 接口的客户端

🔧 两种实现方式

1. 类适配器(通过继承)
// 目标接口
interface USB {void connect();
}// 被适配的类
class TypeC {public void typeCConnect() {System.out.println("Type-C connected");}
}// 适配器 (继承方式)
class TypeCToUSBAdapter extends TypeC implements USB {@Overridepublic void connect() {typeCConnect(); // 调用父类方法}
}
2. 对象适配器(通过组合)
// 适配器 (组合方式)
class TypeCToUSBAdapter implements USB {private TypeC typeC;public TypeCToUSBAdapter(TypeC typeC) {this.typeC = typeC;}@Overridepublic void connect() {typeC.typeCConnect(); // 调用被适配对象方法}
}

📝 客户端使用

public class Client {public static void main(String[] args) {// 类适配器使用USB adapter1 = new TypeCToUSBAdapter();adapter1.connect();// 对象适配器使用TypeC typeC = new TypeC();USB adapter2 = new TypeCToUSBAdapter(typeC);adapter2.connect();}
}

💡 适用场景

  1. 需要使用现有类但其接口不符合需求
  2. 需要创建可复用的类(与未知接口协作)
  3. 需要统一多个不同接口的类
  4. 系统扩展时需兼容旧接口

✅ 优点

  1. 接口兼容:解决不兼容接口问题
  2. 复用性:重用现有类无需修改源码
  3. 解耦:客户端与具体实现解耦
  4. 开闭原则:可引入新适配器而不修改客户端

⚠️ 缺点

  • 过度使用会导致系统结构复杂化
  • 部分语言不支持多重继承(限制类适配器)
  • 可能引入额外性能开销

🌐 实际应用案例

  1. Java I/OInputStreamReader(适配InputStreamReader)
  2. 集合框架Arrays.asList()适配数组到List
  3. GUI开发:不同操作系统组件的适配
  4. 日志框架:SLF4J 适配不同日志实现
  5. 电源适配器:220V ➡️ 110V 电压转换

🆚 模式对比

模式目的关键区别
适配器模式接口转换解决已有接口不兼容问题
装饰器模式增强功能保持接口不变添加功能
外观模式简化复杂系统接口定义新接口整合子系统

💡 黄金法则:适配器模式关注接口转换,装饰器模式关注功能增强,外观模式关注接口简化

代码示例(现实场景)

// 欧洲标准插座
interface EuropeanSocket {void plugInEurope();
}// 中国标准插座(被适配类)
class ChineseSocket {public void plugInChina() {System.out.println("中国标准三脚插头已连接");}
}// 适配器(旅游转换插头)
class SocketAdapter implements EuropeanSocket {private ChineseSocket chineseSocket;public SocketAdapter(ChineseSocket socket) {this.chineseSocket = socket;}@Overridepublic void plugInEurope() {System.out.println("使用转换器...");chineseSocket.plugInChina();}
}// 欧洲电器(客户端)
class EuropeanDevice {public void useDevice(EuropeanSocket socket) {socket.plugInEurope();}
}// 使用示例
public class TravelDemo {public static void main(String[] args) {ChineseSocket wallSocket = new ChineseSocket();SocketAdapter adapter = new SocketAdapter(wallSocket);EuropeanDevice laptop = new EuropeanDevice();laptop.useDevice(adapter); // 成功使用中国插座}
}

输出结果

使用转换器...
中国标准三脚插头已连接

适配器模式是系统集成和代码复用中的重要工具,特别在需要兼容旧系统或整合第三方库时,能有效降低系统耦合度。

http://www.xdnf.cn/news/1139239.html

相关文章:

  • 基于MATLAB的极限学习机ELM的数据分类预测方法应用
  • 闲庭信步使用图像验证平台加速FPGA的开发:第二十一课——高斯下采样后图像还原的FPGA实现
  • 嵌入式时钟系统
  • 产品经理如何绘制流程图
  • vue中的this.$set
  • Python元组(Tuple)指南
  • FastAdmin系统框架通用操作平滑迁移到新服务器的详细步骤-优雅草卓伊凡
  • 爬虫小知识
  • 【Lua】题目小练2
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘django’问题
  • vue-cli 模式下安装 uni-ui
  • JAVA面试宝典 -《Kafka 高吞吐量架构实战:原理解析与性能优化全攻略》
  • 图片上传实现
  • 多方案对比分析:后端数据加密策略及实践
  • Redis7 底层数据结构解析
  • Linux驱动14 --- 平台设备总线
  • JPA 与 MyBatis-Plus 数据库自增主键实现方案
  • GraphQL的N+1问题如何被DataLoader巧妙化解?
  • 【人工智能99问】梯度消失、梯度爆炸的定义、后果及规避手段?(7/99)
  • 使用位运算优化 Vue.js 应用:高效状态管理技巧
  • deep learning(李宏毅)--(六)--loss
  • 虚拟化测试工具Parasoft Virtualize如何为汽车企业提供仿真测试?
  • Helm-k8s包管理工具(一)核心概念、helm工作目录
  • 【Servo】伺服驱动器扫频功能方案文档
  • 有痛呻吟!!!
  • Redis面试相关问题总结
  • 离散与组合数学 杂记
  • 学习设计模式《十八》——备忘录模式
  • AI安全威胁之MCP Server投毒攻击实践
  • 深入理解进程等待:wait的简化与waitpid的灵活性