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

23种设计模式-适配器(Adapter)设计模式

适配器设计模式

  • 🚩什么是适配器设计模式?
  • 🚩适配器设计模式的特点
  • 🚩适配器设计模式的结构
  • 🚩适配器设计模式的优缺点
  • 🚩适配器设计模式的Java实现
  • 🚩代码总结
  • 🚩总结

🚩什么是适配器设计模式?

适配器模式(Adapter Pattern)结构型设计模式,它允许 不兼容的接口 之间进行 协作。适配器模式通过 包装 一个类的接口,使其能够与另一个接口兼容。

使用场景

  • 需要 将现有类与不兼容的接口 进行协作时。

  • 需要 复用现有类,但其接口不符合需求时。

  • 需要 统一多个类的接口,以便客户端可以一致地使用它们。

🚩适配器设计模式的特点

  • 接口转换:适配器模式可以将一个类的接口转换成客户端期望的另一个接口。

  • 透明性:客户端通过适配器与目标接口交互,无需知道适配器的存在。

  • 复用性:适配器模式可以复用现有的类,而无需修改其代码。

  • 灵活性:适配器模式可以灵活地处理不同接口之间的差异。

🚩适配器设计模式的结构

适配器模式主要包含以下部分:

  • Target(目标接口):客户端期望的接口,适配器需要实现该接口。

  • Adaptee(被适配者):需要被适配的类,其接口与目标接口不兼容。

  • Adapter(适配器):通过包装 Adaptee,将其接口转换为 Target 接口。

  • Client(客户端):通过 Target 接口与适配器交互。

图例:

在这里插入图片描述

🚩适配器设计模式的优缺点

✅ 优点

  • 接口兼容:适配器模式可以使不兼容的接口之间进行协作。

  • 复用性:可以复用现有的类,而无需修改其代码。

  • 灵活性:适配器模式可以灵活地处理不同接口之间的差异。

❌ 缺点

  • 增加复杂性:引入适配器会增加系统的复杂性,尤其是在有多个适配器时。

  • 性能开销:适配器模式可能会引入额外的性能开销,尤其是在频繁调用时。

🚩适配器设计模式的Java实现

代码地址:GitHub

  • 创建目标接口 USB,定义客户端期望的方法Request()
/*** @author hanson.huang* @version V1.0* @ClassName USB* @Description 目标接口* @date 2025/3/24 10:09**/
public class USB {public void Request() {System.out.println("USB数据线");}
}
  • 创建被适配者 TypeC,定义其特有的方法 SpecificRequest()
/*** @author hanson.huang* @version V1.0* @ClassName TypeC* @Description 被适配者 TypeC* @date 2025/3/24 10:10**/
public class TypeC {public void SpecificRequest() {System.out.println("Type-C数据线");}
}
  • 创建适配器 Adapter,继承 USB 并包装 TypeC,将 SpecificRequest() 转换为 Request()
/*** @author hanson.huang* @version V1.0* @ClassName Adapter* @Description 适配器 Adapter* @date 2025/3/24 10:10**/
public class Adapter extends USB {private TypeC typeC = new TypeC();@Overridepublic void Request() {typeC.SpecificRequest();}
}
  • 创建客户端,测试适配器模式
/*** @author hanson.huang* @version V1.0* @ClassName AdapterPattern* @Description 测试适配器模式* @date 2025/3/24 10:13**/
public class AdapterPattern {public static void main(String[] args) {USB usb = new Adapter();usb.Request();}
}

📌 运行结果

在这里插入图片描述

🚩代码总结

  • 目标接口 USB 定义客户端期望的方法 Request()

  • 被适配者 TypeC 定义其特有的方法 SpecificRequest()

  • 适配器 Adapter 继承 USB 并包装 TypeC,将 SpecificRequest() 转换为 Request()

🚩总结

  • 适配器模式(Adapter Pattern) 允许 不兼容的接口 之间进行协作,通过 包装 一个类的接口,使其能够与另一个接口兼容。

  • 适用于 将现有类与不兼容的接口 进行协作、复用现有类统一多个类的接口 的场景。

  • Java 实现 需要 定义目标接口创建适配器包装被适配者,以实现接口转换。

✅ 适用场景:

  • 需要 将现有类与不兼容的接口 进行协作时。

  • 需要 复用现有类,但其接口不符合需求时。

  • 需要 统一多个类的接口,以便客户端可以一致地使用它们。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

在这里插入图片描述

相关文章:

23种设计模式-适配器(Adapter)设计模式

适配器设计模式 🚩什么是适配器设计模式?🚩适配器设计模式的特点🚩适配器设计模式的结构🚩适配器设计模式的优缺点🚩适配器设计模式的Java实现🚩代码总结🚩总结 🚩什么是…...

debug 笔记:llama 3.2 部署bug 之cutlassF: no kernel found to launch!

1 问题描述 按照官方的写法 import torch from transformers import pipeline import os os.environ["HF_TOKEN"] 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 model_id "meta-llama/Llama-3.2-3B"pipe pipeline("text-generation", modelmode…...

TCP的长连接和短连接,以及它们分别适用于什么场合

TCP长连接与短连接详解 一、核心概念对比 特性长连接(Persistent Connection)短连接(Short-lived Connection)连接生命周期一次建立后长期保持,多次数据交互复用同一连接每次数据交互均需新建连接,完成后…...

【操作系统】(五)操作系统引导(Boot)

视频参考:王道计算机2.了解计算机的启动过程和主引导扇区,让你的计算机从这里起飞吧_哔哩哔哩_bilibili 操作系统引导(Boot)就是在开机的时候,如何让操作系统运行起来? 主存分成RAM小部分ROM,其中ROM里面存放的是BIOS&#xff08…...

蓝桥与力扣刷题(蓝桥 山)

题目:这天小明正在学数数。 他突然发现有些止整数的形状像一挫 “山”, 比㓚 123565321、145541123565321、145541, 它 们左右对称 (回文) 且数位上的数字先单调不减, 后单调不增。 小朋数了衣久也没有数完, 他惒让你告诉他在区间 [2022,2022222022] 中有 多少个数…...

211数学专业大三想转码C++方向,目前在学算法,没系统学习计算机专业课,要先定方向吗?

今天给大家分享的是一位粉丝的提问,211数学专业大三想转码C方向,目前在学算法,没系统学习计算机专业课,要先定方向吗? 接下来把粉丝的具体提问和我的回复分享给大家,希望也能给一些类似情况的小伙伴一些启…...

场馆预约小程序的设计与实现

摘 要 时代在进步,人们对日常生活质量的要求不再受限于衣食住行。现代人不仅想要一个健康的身体,还想拥有一身宛如黄金比例的身材。但是人们平常除了上下班和上下学的时间,其余空余时间寥寥无几,所以我们需要用体育场馆预约来节省…...

黑苹果及OpenCore Legacy Patcher

黑苹果及OpenCore Legacy Patcher OpenCoreUnable to resolve dependencies, error code 71 OpenCore Unable to resolve dependencies, error code 71 黑苹果升级后打补丁不成功,比如提示以下错误,可参考官方文档进行修复。 Open TerminalType sudo …...

记一个阿里云CDN域名配置不当引起服务鉴权失效问题

背景:公司最近需要通过不同的域名提供给不同角色的用户使用,在阿里云上新增了多个域名,新域名与原域名指向的是一样的服务器地址。 问题现象:用户使用新域名登录后,返回的不是该用户的身份信息,不管是哪个…...

Pytorch学习笔记(十二)Learning PyTorch - NLP from Scratch

这篇博客瞄准的是 pytorch 官方教程中 Learning PyTorch 章节的 NLP from Scratch 部分。 官网链接:https://pytorch.org/tutorials/intermediate/nlp_from_scratch_index.html 完整网盘链接: https://pan.baidu.com/s/1L9PVZ-KRDGVER-AJnXOvlQ?pwdaa2m 提取码: …...

遗传算法优化支持向量机分类是一种将遗传算法与支持向量机相结合的方法

遗传算法优化支持向量机分类是一种将遗传算法与支持向量机相结合的方法,旨在提高支持向量机的分类性能。以下是其相关内容的详细介绍: 支持向量机(SVM) 原理:SVM是一种基于统计学习理论的机器学习方法,其…...

Axure项目实战:智慧运输平台后台管理端-母版、登录(文本框高级交互)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:智慧运输平台后台管理端 主要内容:母版、登录页制作 应用场景:母版、登录、注册、密码找回 案例展示: 案例视频…...

时序数据库 InfluxDB(一)

时序数据库 InfluxDB(一) 数据库种类有很多,比如传统的关系型数据库 RDBMS( 如 MySQL ),NoSQL 数据库( 如 MongoDB ),Key-Value 类型( 如 redis &#xff09…...

java开发环境本地全套

文章目录 1、jdk下载安装1.1、下载地址:1.2、安装1.3、验证 2、maven下载安装2.1、下载地址2.2、安装2.3、验证 3、git下载。3.1、下载地址 4、ideal下载5、dbeaver下载 1、jdk下载安装 1.1、下载地址: https://www.oracle.com/java/technologies/down…...

优化 K8s负载平衡之方法(Method for Optimizing K8s Load Balancing)

优化 K8s 负载平衡的 11 种方法 优化 Kubernetes 中的负载平衡对于保持应用程序的高可用性、可扩展性和性能至关重要。有效的负载平衡可确保流量在 Pod 之间高效分配,防止任何单个 Pod 成为瓶颈并确保无缝的用户体验。本指南探讨了优化 Kubernetes 负载平衡的 11 种…...

华为配置篇-ISIS基础实验

ISIS 一、简述二、常用命令总结三、实验 一、简述 一、基本定义与历史背景 IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是一种链路状态路由协议,最初由ISO设计用于OSI(开放系统互联&#…...

QTcpSocket(客户端实现)多线程连接慢问题

20250325记录 环境 Qt5.14.2 64位 msvc编译 在多线程环境下,使用QTcpSocket实现客户端,发现在少部分电脑上,连接时间过长,定时器检查套接字状态时,发现连接处于QAbstractSocket::ConnectingState状态。 //声明为一…...

【深度学习】【目标检测】【OnnxRuntime】【C++】YOLOV3模型部署

【深度学习】【目标检测】【OnnxRuntime】【C】YOLOV3模型部署 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【目标检测】【OnnxRuntime】【C】YOLOV3模型部署前言Windows平台搭建依赖环境模型转换--pytorch转onnxONNXRuntime推…...

【力扣hot100题】(008)找到字符串中所有字母异位词

我果然还是太菜了(点烟)。 一开始想法是构建map,记录每个字母出现的位置,后来想了好久滑动窗口该怎么移动。 后来看了答案才明白滑动窗口是固定的啊啊啊,每次向右滑就两指针同时右移就行。 好简单……为什么我做了这…...

【计科】从操作系统到虚拟化技术(进程调度,内存映射,设备IO,文件、网络管理)

【计科】操作系统基础与虚拟化技术拓展的关系(进程调度,内存映射,设备IO,文件、网络管理) 文章目录 1、进程管理与调度机制(计算)2、内存管理与双重映射3、设备管理与IO机制4、文件管理5、网络与…...

ECharts各类炫酷图表/3D柱形图

一、前言 最近鸡米花实现了各类的炫酷的图表,有3D柱形图、双边柱形图以及异形柱形图,好了,直接上图: 二、效果图 一个个来吧,下面就是代码啦,注意,一下图表展示的宽高均为800px*300px 三、异形横…...

系统与网络安全------网络应用基础(6)

资料整理于网络资料、书本资料、AI,仅供个人学习参考。 Win10系统安装 安装Win10系统 安装准备 Windows10系统的安装光盘 虚拟机可采用ISO文件,windows_10_professional_x64_2024.iso Windows10系统的硬件要求 CPU处理器:1.0Ghz或更快 …...

【区块链安全 | 第七篇】EVM概念详解

文章目录 1. EVM 概述以太坊虚拟机(Ethereum Virtual Machine,EVM)的作用EVM 如何执行智能合约账户类型 2. EVM 体系结构栈(Stack)内存(Memory)存储(Storage)Gas 机制 3.…...

Android设计模式之单例模式

一、定义:确保一个类只有一个实例,并且自动实例化,并向整个系统提供这个实例。 二、使用场景:避免重复创建对象,过多消耗系统资源。 三、使用方式 3.1饿汉式:类加载时立即初始化,线程安全&…...

清晰易懂的Trae实现为AI编程从安装到实战开发ToDoList

一、Trae简介与核心优势 Trae是字节跳动推出的国内首个AI原生集成开发环境(AI IDE),它不同于传统的代码编辑器或AI插件,而是将AI能力深度集成到整个开发流程中,实现"人与AI协同编程"的全新体验。作为一款真…...

基于杜鹃鸟鲶鱼优化(Cuckoo Catfish Optimizer,CCO)算法的多个无人机协同路径规划(可以自定义无人机数量及起始点),MATLAB代码

一、杜鹃鸟鲶鱼优化算法 杜鹃鸟鲶鱼优化(Cuckoo Catfish Optimizer,CCO)算法模拟了杜鹃鸟鲶鱼的搜索、捕食和寄生慈鲷行为。该算法的早期迭代侧重于执行多维包络搜索策略和压缩空间策略,并结合辅助搜索策略来有效限制慈鳔的逃逸空…...

16个气象数据可视化网站整理分享

好的!以下是关于“16个气象数据可视化网站整理分享”的软文: 16个气象数据可视化网站整理分享 气象数据可视化已成为现代气象研究、决策支持以及公众天气服务的重要组成部分。从天气预报到气候变化监测,全球许多气象数据可视化平台为专业人士…...

word光标一直闪的解决办法

在选项里,打开首选项,(如果打不开,可以新建一个word也许就可以,实在不行只能靠眼疾手快,趁他还没闪赶紧点) 选COM加载项,在里面取消勾选MicrosoftOfficePLUS...

⑥ ACG-系统管理

上网管理行为是指对员工在工作时间内使用公司网络的行为进行管理和监督。在企业中,系统管理是实施上网管理行为的重要方式之一。系统管理包括以下几个方面: 1. 访问控制:通过设置网络访问权限,对员工访问特定网站或使用特定应用程…...

基于大模型的肺良性肿瘤术前、术中、术后全流程预测与诊疗方案研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 国内外研究现状 二、大模型预测原理与方法 2.1 大模型概述 2.2 数据收集与预处理 2.3 特征工程 2.4 模型训练与优化 三、术前预测与方案制定 3.1 肿瘤性质预测 3.1.1 预测模型构建 3.1.2 预测结果分析 3.2 手…...