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

news2025/4/2 3:29:55

适配器设计模式

  • 🚩什么是适配器设计模式?
  • 🚩适配器设计模式的特点
  • 🚩适配器设计模式的结构
  • 🚩适配器设计模式的优缺点
  • 🚩适配器设计模式的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();

    @Override
    public 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 实现 需要 定义目标接口创建适配器包装被适配者,以实现接口转换。

✅ 适用场景:

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

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

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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2323372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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] 中有 多少个数…

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

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

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 提取码: …

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…

华为配置篇-ISIS基础实验

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

【深度学习】【目标检测】【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.…

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

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

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

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

word光标一直闪的解决办法

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

⑥ ACG-系统管理

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