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

Java编程之适配器模式

定义

Java适配器模式(Adapter Pattern)是一种结构型设计模式,其核心思想是通过创建一个适配器类,将一个类的接口转换成客户希望的另一个接口,从而使原本由于接口不兼容而不能一起工作的类可以协同工作。简单来说,适配器模式就像是一个翻译官,在两种不同 “语言”(接口)之间进行转换,使得双方能够顺利沟通。

核心概念

适配器模式通过转换接口实现不兼容对象间的协作,包含三个角色:

  1. 目标接口(Target):客户端期望的接口
  2. 被适配者(Adaptee):需要被适配的现存组件
  3. 适配器(Adapter):实现接口转换的中间件

在 Java 中,适配器模式主要有两种实现方式:类适配器和对象适配器。​

代码示例
// 目标接口:标准电压输出
interface Voltage5V {int output5V();
}// 被适配者:家用220V电源
class Household220V {public int output220V() {System.out.println("输出220V交流电");return 220;}
}
类适配器​

类适配器通过继承来实现适配功能。适配器类同时继承被适配者类和实现目标接口。这种方式在 Java 中受到一定限制,因为 Java 只支持单继承,所以适配器类只能适配一个被适配者类。

// 类适配器(继承实现)
class ClassAdapter extends Household220V implements Voltage5V {@Overridepublic int output5V() {int src = super.output220V();System.out.println("电压转换:220V -> 5V");return src / 44;}
}
对象适配器​

对象适配器通过组合来实现适配功能。适配器类实现目标接口,并持有一个被适配者对象的引用。这种方式更加灵活,因为适配器类可以通过持有不同的被适配者对象来适配多个不同的被适配者。

// 对象适配器(组合实现)
class ObjectAdapter implements Voltage5V {private Household220V household220V;public ObjectAdapter(Household220V household220V) {this.household220V = household220V;}@Overridepublic int output5V() {int src = household220V.output220V();System.out.println("电压转换:220V -> 5V");return src / 44;}
}
两种实现对比
特性类适配器对象适配器
实现方式继承被适配类组合被适配对象
灵活性单继承限制可适配多个不同对象
方法覆盖可重写父类方法无法直接访问私有方法
目标接口实现接口实现接口
典型应用场景
  1. 旧系统功能复用
  2. 第三方库接口适配
  3. 统一多个类的接口
  4. 跨平台兼容性处理

注意事项

  • 优先使用组合而非继承
  • 避免创建过多小型适配器
  • 接口设计应保持适度前瞻性
  • 在系统演化过程中及时重构冗余适配器

通过合理使用适配器模式,可以提高代码的复用性和系统的扩展性,但需注意避免因过度包装导致系统复杂度增加。

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

相关文章:

  • 【题解】[UTPC2024] C.Card Deck
  • CF2056 D. Unique Median(2200)
  • 快速部署和启动Vue3项目
  • Pytorch学习——自动求导与计算图
  • 在Ubuntu22.04 系统中安装Docker详细教程
  • 大话软工笔记—需求分解
  • 大数据(2) 大数据处理架构Hadoop
  • 原型链与继承
  • 实习学习项目
  • 十(1). 强制类型转换
  • 汇编语言学习(三)——DoxBox中debug的使用
  • Android启动时长优化(kernel部分)
  • 硬件电路设计-开关电源设计
  • PLC有脉冲输出,但伺服电机无法旋转
  • Linux安装jdk、tomcat
  • gopool 源码分析
  • 今天对C语言中static和extern关键字的作用认识又深刻了
  • Mysql 插入中文乱码
  • 牛客练习赛140
  • 广东餐饮服务中高级证备考指南:高效学习与应试技巧
  • H_Prj06_02 8088单板机串口读取内存块
  • 瀑布流布局
  • Vue2 模板中使用可选链操作符(?.)的坑
  • gRPC 的四种通信模式完整示例
  • 自动驾驶---SD图导航的规划策略
  • 【CSS-5】掌握CSS文本样式:从基础到高级技巧
  • C# 中替换多层级数据的 Id 和 ParentId,保持主从或父子关系不变
  • Python_day47
  • burpsuite安装与入门使用
  • 【C++特殊工具与技术】优化内存分配(二):allocator类