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

23种设计模式-结构型模式之适配器模式(Java版本)

Java 适配器模式(Adapter Pattern)详解

🔌 什么是适配器模式?

适配器模式用于将一个类的接口转换成客户端所期望的另一种接口,让原本接口不兼容的类可以协同工作。

📦 就像插头转换器,让不同国家的插座和电器匹配。


🧠 使用场景

  • 系统中有现成的类,但接口不符合需求
  • 想复用老代码,但不想改动它
  • 接口适配第三方库或遗留系统

🏗️ 模式结构

  • Target(目标接口):客户端期望的接口
  • Adaptee(被适配者):已有的接口
  • Adapter(适配器):将 Adaptee 转换为 Target

✅ 示例:USB 转 Type-C 适配器

目标接口(TypeC)

public interface TypeC {void chargeWithTypeC();
}

被适配者(老版 USB)

public class USBCharger {public void chargeWithUSB() {System.out.println("使用 USB 接口充电");}
}

适配器类(类适配器方式,使用继承)

public class USBToTypeCAdapter extends USBCharger implements TypeC {@Overridepublic void chargeWithTypeC() {System.out.println("适配器转换 Type-C -> USB");chargeWithUSB(); // 实际还是调用 USB}
}

客户端调用

public class Main {public static void main(String[] args) {TypeC charger = new USBToTypeCAdapter();charger.chargeWithTypeC();}
}

🔄 另一种方式:对象适配器(使用组合)

public class USBToTypeCObjectAdapter implements TypeC {private USBCharger usbCharger;public USBToTypeCObjectAdapter(USBCharger usbCharger) {this.usbCharger = usbCharger;}@Overridepublic void chargeWithTypeC() {System.out.println("对象适配器:Type-C -> USB");usbCharger.chargeWithUSB();}
}

🧩 优点

  • 解耦客户端与具体实现类
  • 提高复用性(复用旧类)
  • 灵活性强:支持类适配或对象适配

⚠️ 缺点

  • 增加系统复杂性
  • 过多使用会导致系统中充斥着适配器,降低可读性

✅ 使用建议

适配器模式适用于以下场景:

  • 接口不兼容但需复用旧类
  • 调整不同模块或库之间的协作接口
  • 系统升级过渡阶段,保留旧逻辑的同时支持新接口
http://www.dtcms.com/a/144573.html

相关文章:

  • 23种设计模式-结构型模式之装饰器模式(Java版本)
  • 延长(暂停)Windows更新
  • 学习设计模式《四》——单例模式
  • Halcon应用:相机标定
  • Deepseek输出的内容如何直接转化为word文件?
  • 大模型面经 | 介绍一下CLIP和BLIP
  • QSS【QT】
  • React 文章 分页
  • TDengine 性能监控与调优实战指南(一)
  • Docker Compose 外部网络(`external: true`)与内部网络的区别
  • 5、openfeign
  • 对于在线教育或知识付费类网站视频处理方案
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.3.24)
  • 海拔与大气压关系,大气压单位,气压传感器对比
  • DeepSeek与ECharts融合助力复杂图表高效制作
  • 声音识别(声纹识别)和语音识别的区别
  • python爬虫复习
  • SpringBoot 知识图谱
  • 小迪第10天http/s数据包
  • uni-app中map的使用
  • idea中导入从GitHub上克隆下来的springboot项目解决找不到主类的问题
  • FastAPI:现代高性能Python Web框架的技术解析与实践指南
  • PCA 降维实战:从原理到电信客户流失数据应用
  • Vue如何实现样式隔离
  • QML中日期处理类
  • Oracle 23ai Vector Search 系列之6 向量相似性搜索(Similarity Search)
  • SpringBoot3集成ES8.15实现余额监控
  • 2. 什么是最普通的自动化“裸奔状态”?
  • 【Rust基础】使用Rocket从Token中提取用户信息
  • (mac)Grafana监控系统之监控Linux的Redis