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

类图+案例+代码详解:软件设计模式----适配器模式

7、适配器模式

是为了解决接口不一致的问题。

类适配器:适配器Adapter需要实现目标接口Target(声明所有需要的方法),并继承被适配类Adaptee。由于Adapter继承了Adaptee,所以Adapter只需要实现Target中Adaptee所拥有的以外的方法。

但是,在java中一个类不允许有两个直接超类,所以当有两个或两个以上的类Adaptee需要被适配时,就不能继续使用类适配器。

请添加图片描述

对象适配器(推荐):与类适配器基本相同,不同的是,Adapter实现Target中的所有方法(Operation1和Operation2),不再有继承于Adaptee的方法。但是,对于Target的Operation1的实现,是通过在Operation1方法里调用Adaptee声明的方法Operation1,以此来实现适配功能。当有多个Adaptee时,也就不会有多继承发生。

Adapter与Adaptee是聚合关系。

请添加图片描述

代码示例:充电接口的适配

场景:手机需要通过 USB 接口充电,但现有电源是圆孔接口。

1. 定义目标接口(USB 接口)

// 目标接口:手机需要的USB充电接口
interface USBCharger {void chargeWithUSB(); // 用USB接口充电
}

2. 定义适配者(圆孔电源接口)

// 适配者:现有的圆孔电源接口
class RoundHolePower {public void supplyWithRoundHole() {System.out.println("通过圆孔接口供电");}
}

3. 实现适配器(转换插头)

// 适配器:将圆孔接口转换为USB接口
class PowerAdapter implements USBCharger {private RoundHolePower power; // 持有适配者的引用public PowerAdapter(RoundHolePower power) {this.power = power;}@Overridepublic void chargeWithUSB() {System.out.println("适配器开始工作:");power.supplyWithRoundHole(); // 调用适配者的方法System.out.println("转换为USB接口,手机开始充电");}
}

4. 使用适配器

public class AdapterDemo {public static void main(String[] args) {// 1. 创建适配者(圆孔电源)RoundHolePower power = new RoundHolePower();// 2. 创建适配器,传入适配者USBCharger adapter = new PowerAdapter(power);// 3. 通过目标接口使用适配器adapter.chargeWithUSB();}
}
http://www.dtcms.com/a/267136.html

相关文章:

  • HarmonyOS学习3---ArkUI
  • Java零基础笔记01(JKD及开发工具IDEA安装配置)
  • 【Linux网络篇】:网络中的其他重要协议或技术——DNS,ICMP协议,NAT技术等
  • STM32第十四天串口
  • uniapp启动图被拉伸问题
  • 国产 OFD 标准公文软件数科 OFD 阅读器:OFD/PDF 双格式支持,公务办公必备
  • React Hooks 内部实现原理与函数组件更新机制
  • 【LeetCode 热题 100】73. 矩阵置零——(解法二)空间复杂度 O(1)
  • stm32的三种开发方式
  • Zigbee/Thread
  • 车载以太网-防火墙
  • 【深度学习】强化学习(Reinforcement Learning, RL)主流架构解析
  • 2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--下篇
  • React Native 开发环境搭建--mac--android--奔溃的一天
  • App爬虫实战篇-以华为真机手机爬取集换社的app为例
  • Pytest 测试发现机制详解:自动识别测试函数与模块
  • 在 Ubuntu 下配置 oh-my-posh —— 普通用户 + root 各自使用独立主题(共享可执行)
  • Redis Cluster 与 Sentinel 笔记
  • 文本方式和二进制方式打开文件的不同
  • Flutter 使用http库获取网络数据的方法(一)
  • Excel 数据透视表不够用时,如何处理来自多个数据源的数据?
  • MAX3485在MCU芯片AS32S601-485通信外设中的应用
  • 线程的礼让和加入
  • 1004、最大连续1的个数 III
  • SpringBatch使用介绍
  • 任务调度器(Scheduler)实现逻辑
  • Java 创建对象过程 JVM 内存分配并发安全笔记
  • JVM与JMM
  • Mysql底层专题(四)索引优化实战一
  • DeepSeek与诡秘之主