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

结构型:适配器模式

目录

1、核心思想

2、实现方式

2.1 类适配器(继承实现,专属适配器)

2.1.1 模式结构

2.1.2 实现案例

2.2 对象适配器(组合实现,通用适配器)

2.2.1 模式结构

2.2.2 实现案例

3、优缺点分析

4、适用场景


1、核心思想

目的:解决接口不兼容问题,通过接口转换的方式,使原本无法协同工作的类能够一起工作,达到解耦效果。

概念:当一个对象或类的接口不能匹配用户所期待的接口时,适配器就充当中间转换的角色,以达到兼容用户接口的目的,同时适配器也实现了客户端与接口的解耦,提高了组件的可复用性。

举例

1> 跨语言沟通:必须找个会两种语言的翻译,将接口转换才能使沟通进行下去,我们将翻译这个角色称为适配器

2> 电源适配器:将220V电压转换为手机所需的5V

3> USB转Type-C转换器:连接不同接口的设备

2、实现方式

2.1 类适配器(继承实现,专属适配器)

2.1.1 模式结构

结构:适配器继承被适配者(Adaptee)并实现目标接口(Target)

特点:直接复用被适配者的方法,但受限于单继承

三个核心角色:

  • Target(目标接口)​:客户端要使用的目标接口标准
  • Adaptee(被适配者)​:被适配者的类实现,目前不能兼容目标接口的问题类
  • Adapter(适配器)​:继承自被适配者类且实现了目标接口,负责适配(转换)被适配者的接口specificRequest()为目标接口request()

2.1.2 实现案例

// 目标接口(Target)
interface USB {void connect();
}// 被适配者(Adaptee)
class TypeC {public void typeCConnect() {System.out.println("Type-C connected.");}
}// 类适配器(继承TypeC,实现USB)
class Adapter extends TypeC implements USB {@Overridepublic void connect() {typeCConnect(); // 调用父类方法}
}// 客户端
class Client {public static void main(String[] args) {TypeC typec = new Adapter();typec.connect();}
}

2.2 对象适配器(组合实现,通用适配器)

2.2.1 模式结构

结构:适配器持有被适配者的实例,通过组合实现接口转换。

特点:更灵活,支持多个被适配者,符合“合成复用原则”。

三个核心角色:

  • Target(目标接口)​:客户端要使用的目标接口标准
  • Adaptee(被适配者)​:被适配者的接口标准,目前不能兼容目标接口的问题接口,可以有多种实现类
  • Adapter(适配器)​:实现了目标接口,负责适配(转换)被适配者的接口specificRequest()为目标接口request()

2.2.2 实现案例

// 目标接口(Target)
interface USB {void connect();
}// 被适配者(Adaptee)
interface TypeC {void typeCConnect();
}// 适配器(Adapter)
class Adapter implements USB {private TypeC typeC;public Adapter(TypeC typeC) {this.typeC = typeC;}@Overridepublic void connect() {typeC.typeCConnect(); // 调用被适配对象的方法}
}// 客户端
class Client {public static void main(String[] args) {TypeC typec = new TypeCImpl();//TypeC的实现类USB usb = new Adapter(typec);usb.connect();}
}

3、优缺点分析

优点缺点
提高代码复用性(无需修改原有代码)增加代码复杂度(需新增适配器类)
灵活支持多适配者(对象适配器)过度使用可能导致系统结构混乱
符合开闭原则(通过扩展而非修改)

4、适用场景

  • 整合第三方库

    • 当需要引入外部库但接口与现有系统不匹配时,通过适配器封装其接口。

  • 系统升级过渡

    • 新旧模块共存时,用适配器让旧代码兼容新接口,避免大规模重构。

  • 统一多个类的接口

    • 例如,系统需要支持多种日志框架(如Log4j、SLF4J),通过适配器统一日志接口。

  • 框架中的典型案例

    • Java I/OInputStreamReader适配字节流到字符流。

    • Android RecyclerViewAdapter将数据绑定到列表视图。

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

相关文章:

  • K8S之核心技术Helm
  • 谷歌medgemma-27b-text-it医疗大模型论文速读:面向医学视觉问答的语义标签知识增强数据集SLAKE
  • 【Linux】进程间通信(四):System V标准(共享内存、消息队列、信息量)
  • [Git] 认识 Git 的三大区域 文件的修改和提交
  • linux杀死进程自身
  • Docker实战
  • docker network 自定义网络配置与管理指南
  • 数字孪生技术如何重塑能源产业?
  • 生成树协议(STP)配置详解:避免网络环路的最佳实践
  • java基础(api)
  • 第八天的尝试
  • 印度语言指令驱动的无人机导航!UAV-VLN:端到端视觉语言导航助力无人机自主飞行
  • AllToAll通信为什么用于EP并行?
  • Linux性能监控工具nmon
  • 【开源解析】基于深度学习的双色球预测系统:从数据获取到可视化分析
  • Axure系统原型设计首页模版方案
  • InetAddress 类详解
  • AI大模型技术全景解析:核心原理与关键技术拆解
  • 【C++ 真题】P5736 【深基7.例2】质数筛
  • HJ23 删除字符串中出现次数最少的字符【牛客网】
  • 《Effective Java(第三版)》笔记
  • ESP32-S3 (ESP IDF 5.4.1 - LVGL 9.2.0)九宫格拼音输入法
  • 工业控制解决方案三段论
  • Java 实现四种单例(都是线程安全)
  • 【Linux】了解 消息队列 system V信号量 IPC原理
  • 常见字符串相似度算法详解
  • 使用Pandoc实现Markdown和Word文档的双向转换
  • 基于LiveData和ViewModel的路线管理实现(带PopupWindow删除功能)
  • 人工智能价值:技术革命下的职业新坐标
  • 【java】Java注解