适配器模式

什么是适配器模式?

适配器模式是一种结构模式,它将一个类的接口转换为客户期望的另一个接口。适配器让类能够协同工作,否则由于接口不兼容而无法协同工作。

什么时候使用它?

当您想要使用遗留代码或第三方库但其接口与应用程序的其他部分不兼容时,请使用适配器模式。

问题

我们一直在使用旧打印机,但现在发明了与新打印机集成的新免费软件。问题是我们买不起新打印机,但仍然想使用该软件。有没有办法使用新软件但使用与该软件不兼容的旧打印机?是的,这里适配器模式就派上用场了。

解决方案

适配器模式

新软件
这是我们的客户。这只接受 modernprinter 接口。 newsoftware 认为它正在处理 modernprinter。

现代打印机
为client提供兼容的接口。

打印机适配器
从 modernprinter 接收方法调用 modernprint(),然后将其转换为

格式

旧打印机
这就是我们想要使用的,但它的界面与我们的新软件不兼容。当 modernprinter 调用 modernprint() 时,oldprint() 被执行。

结构

适配器模式

记住适配器可以与适配器的任何子类一起使用。

java实现

public class oldprinter {    public void oldprint(string document) {        system.out.println(document + " by old printer");    }}
public interface modernprinter {    void modernprint(string document);}
public class printeradapter implements modernprinter {    private oldprinter oldprinter;    public printeradapter(oldprinter oldprinter) {        this.oldprinter = oldprinter;    }    @override    public void modernprint(string document) {        oldprinter.oldprint(document);    }}
public class newsoftware {    public static void main(string[] args) {        oldprinter oldprinter = new oldprinter();        // because printeradapter implements modernprinter, it can be seen        // as a modernprinter which is integrated with newsoftware        modernprinter adapter = new printeradapter(oldprinter);        adapter.modernprint("hello world");    }}

在我们的假设中,您的 newsoftware 与 modernprinter 集成,因此像 oldprinter.oldprint(“hello world”); 这样的代码没有意义。在 newsoftware 类中(即使编译时不会出现错误)。

输出:

Hello world by old printer

陷阱

除了简单的接口转换之外,适配器还做了很多工作,会导致添加/更改适配器行为,这与适配器模式的意图相去甚远。

对象和类适配器

我们所看到的称为对象适配器,它使用组合来适应适配器。还有另一种类型的适配器称为类适配器,它使用继承来实现适配器模式的意图。

琅琅配音 琅琅配音

全能AI配音神器

琅琅配音 208 查看详情 琅琅配音

java不支持多重继承。所以我们不能在java中使用类适配器,但无论如何我们都会研究它,因为你可能会遇到其他语言中的类适配器。

适配器模式

因为对象适配器使用组合,适配器可以保存对一个或多个adaptee对象的引用。因此,对象适配器提供了更大的灵活性。而类适配器与一个且只有一个适配器紧密耦合,这导致灵活性较低。

您可以在这里查看所有设计模式的实现。
github 存储库

以上就是适配器模式的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/379760.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
改善 iPhone 体验的 10 个很棒的技巧
上一篇 2025年11月6日 10:56:31
宝可梦开发商新作《轮回之兽》预告 2026年发售
下一篇 2025年11月6日 10:56:36

相关推荐

  • 如何使用Java开发RPA?自动化流程机器人

    如何使用Java开发RPA?自动化流程机器人如何使用Java开发RPA?自动化流程机器人如何使用Java开发RPA?自动化流程机器人如何使用Java开发RPA?自动化流程机器人

    java能用来开发rpa,而且是个相当靠谱的选择。它跨平台、稳定,还有庞大的社区支持,能帮你构建强大且灵活的自动化流程。解决方案:使用java开发rpa,需要关注以下几个核心方面:1.选择合适的框架和库,如selenium用于web浏览器操作,sikulix用于桌面应用自动化,apache poi用…

    2026年10月7日 • 用户投稿
    000
  • 自定义校验器在 Spring Boot 中校验字符串请求体

    自定义校验器在 Spring Boot 中校验字符串请求体自定义校验器在 Spring Boot 中校验字符串请求体自定义校验器在 Spring Boot 中校验字符串请求体自定义校验器在 Spring Boot 中校验字符串请求体

    在 Spring Boot 应用中,我们经常需要对请求体进行校验,以确保接收到的数据符合预期的格式和规范。对于简单的字符串请求体,我们可以通过自定义校验器来实现更灵活的验证逻辑。本文将介绍如何创建一个自定义校验器,用于验证请求体中的字符串是否符合 JSON 格式。 首先,我们需要创建一个自定义注解,…

    2026年10月7日 • 用户投稿
    100
  • 机器人感知大升级!轻量化注入几何先验,成功率提升 31%

    机器人感知大升级!轻量化注入几何先验,成功率提升 31%机器人感知大升级!轻量化注入几何先验,成功率提升 31%机器人感知大升级!轻量化注入几何先验,成功率提升 31%机器人感知大升级!轻量化注入几何先验,成功率提升 31%

    在机器人学习领域,让 ai 真正“看懂”三维世界始终是一个核心挑战。 现有的视觉语言动作(VLA)模型大多基于预训练的视觉语言模型(VLM),仅利用 2D 图像-文本对进行训练,缺乏对真实操作至关重要的 3D 空间感知能力。 虽然当前一些方法通过引入显式深度信息来增强模型,但这类方案通常依赖额外的深…

    2026年10月6日 • 用户投稿
    200
  • 宏碁IFA期间发布多款重磅新品 以硬核科技“智启未来“

    宏碁IFA期间发布多款重磅新品  以硬核科技“智启未来“宏碁IFA期间发布多款重磅新品  以硬核科技“智启未来“宏碁IFA期间发布多款重磅新品  以硬核科技“智启未来“宏碁IFA期间发布多款重磅新品  以硬核科技“智启未来“

    (德国柏林,2025年9月3日)在 ifa 2025 展会期间,宏碁隆重举办 next@acer 全球发布会,以“shape what’s next 智启未来”为核心理念,全面呈现其在人工智能、移动互联与高性能计算领域的前沿探索与创新成果。作为全球科技生态的重要推动者,宏碁不仅以技术革新赢得关注,更…

    2026年10月6日 • 用户投稿
    100
  • 如何设置ai标点符号大小

    如何设置ai标点符号大小如何设置ai标点符号大小如何设置ai标点符号大小如何设置ai标点符号大小

    在利用ai处理文本时,标点符号的字号设定往往会显著影响整体排版的美观度与阅读流畅性。那么,如何合理设置ai中标点符号的大小呢? 首先,需根据不同的使用场景来判断对标点尺寸的要求。在撰写正式文件、学术论文等严肃文本时,标点应与正文字体保持协调一致,以体现专业性和规范性。通常情况下,标点大小应与正文采用…

    2026年10月6日 • 用户投稿
    000
  • 如何在192.168.1.1上查看日志?分析网络问题的步骤有哪些?

    如何在192.168.1.1上查看日志?分析网络问题的步骤有哪些?如何在192.168.1.1上查看日志?分析网络问题的步骤有哪些?如何在192.168.1.1上查看日志?分析网络问题的步骤有哪些?如何在192.168.1.1上查看日志?分析网络问题的步骤有哪些?

    答案:无法直接在192.168.1.1查看日志,需登录路由器管理界面查找“系统日志”等选项,查看或导出日志文件,结合时间戳、事件类型、IP地址、端口、错误代码等信息分析问题,并通过ping和traceroute工具判断内网或外网故障。 通常情况下,你无法直接在192.168.1.1这个地址上查看日志…

    2026年10月6日 • 用户投稿
    100
  • Java调用Python脚本的几种实现方式对比

    Java调用Python脚本的几种实现方式对比Java调用Python脚本的几种实现方式对比Java调用Python脚本的几种实现方式对比Java调用Python脚本的几种实现方式对比

    java调用python脚本有三种主要方式:进程调用、jython嵌入和rpc/消息队列;2. 进程调用通过runtime.exec或processbuilder启动独立python进程,适用于简单脚本但性能开销大;3. jython嵌入将python代码编译为java字节码,实现无缝集成但不支持c…

    2026年10月6日 • 用户投稿
    100
  • Java教程:计算二维数组奇数列元素之和

    本教程详细讲解如何在Java中计算二维数组中所有奇数列(索引为1, 3, 5…)元素的总和。文章阐述了基于0-based索引的遍历逻辑,通过控制内层循环的起始索引和步长,高效地筛选并累加目标元素,并提供了完整的代码示例及关键点解析,帮助读者掌握此类数组操作技巧。 理解奇数列与索引 在ja…

    2026年10月6日
    000
  • 如何永久激活win8专业版_Win8专业版永久激活实战教程

    如何永久激活win8专业版_Win8专业版永久激活实战教程如何永久激活win8专业版_Win8专业版永久激活实战教程如何永久激活win8专业版_Win8专业版永久激活实战教程如何永久激活win8专业版_Win8专业版永久激活实战教程

    首先确认设备已连接互联网并登录原微软账户,通过系统设置中的激活选项可自动匹配数字许可证完成永久激活;若拥有合法密钥,可在“更新和安全”中手动输入密钥验证激活;对于支持硬件识别的设备,可通过PowerShell运行HWID激活命令实现免密钥在线激活;此外,还可使用离线激活脚本工具包,以管理员身份运行M…

    2026年10月6日 • 用户投稿
    200
  • Linux下BusyBox根文件系统制作

    Linux下BusyBox根文件系统制作Linux下BusyBox根文件系统制作Linux下BusyBox根文件系统制作Linux下BusyBox根文件系统制作

    BusyBox 简介 busybox 是一个集成了超过一百个最常用 linux 命令和工具的软件。它包含了简单的工具,如 ls、cat 和 echo 等,还包括一些更大、更复杂的工具。有人称 busybox 为 linux 工具中的瑞士军刀。简单来说,busybox 就像一个大型工具箱,它整合了许多…

    2026年10月6日 • 用户投稿
    200
  • 基于自定义Comparator实现复杂排序

    基于自定义Comparator实现复杂排序基于自定义Comparator实现复杂排序基于自定义Comparator实现复杂排序基于自定义Comparator实现复杂排序

    本文介绍如何利用Java 8的Comparator接口,结合自定义的Comparator实现对复杂对象的排序。重点讲解了Comparator.comparing(Function, Comparator)方法的使用,并通过示例代码展示了如何将外部传入的Comparator应用于对象属性的比较,最终实…

    2026年10月6日 • 用户投稿
    100
  • 如何在composer脚本中获取当前项目的根目录

    如何在composer脚本中获取当前项目的根目录如何在composer脚本中获取当前项目的根目录如何在composer脚本中获取当前项目的根目录如何在composer脚本中获取当前项目的根目录

    最推荐通过事件对象获取项目根目录:利用 Event 对象的 $event->getComposer() 获取实例,结合 vendor-dir 配置反推根路径,如 $composer->getConfig()->get(‘vendor-dir’) . &#82…

    2026年10月6日 • 用户投稿
    000
  • 保时捷女销冠称被合成AI不雅视频 本人:坚决追究涉案人员的法律责任

    10月11日,据媒体报道,青岛保时捷销售中心员工牟女士近日公开表示,自己遭遇了由ai技术恶意生成的虚假视频和不当内容的网络诽谤与侮辱,目前已向警方报案,并决心追究相关责任人的民事及刑事责任。 在接受采访时,牟女士透露,此前也曾遭遇过“黄谣”攻击,但此次情况更为严重。相关不实视频持续扩散,浏览量或已超…

    2026年10月6日
    000
  • Composer在Mac上通过Homebrew如何安装?

    Composer在Mac上通过Homebrew如何安装?Composer在Mac上通过Homebrew如何安装?Composer在Mac上通过Homebrew如何安装?Composer在Mac上通过Homebrew如何安装?

    确认Homebrew已安装,若未安装需先执行官方命令;2. 使用brew install php安装PHP并验证版本;3. 运行brew install composer安装工具;4. 执行composer –version确认安装成功,Homebrew自动处理依赖与路径配置。 在Mac…

    2026年10月6日 • 用户投稿
    300
  • 基于自定义Comparator创建Comparator的教程

    基于自定义Comparator创建Comparator的教程基于自定义Comparator创建Comparator的教程基于自定义Comparator创建Comparator的教程基于自定义Comparator创建Comparator的教程

    本文旨在解决如何基于已有的 Comparator 创建用于比较自定义类型 IntIdx 的 Comparator。通过使用 Comparator.comparing(Function, Comparator) 方法,可以优雅地将外部传入的比较器应用于 IntIdx 对象的特定属性,并与其他比较规则组…

    2026年10月6日 • 用户投稿
    100
  • 如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?

    如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?

    明确指定select语句中的列名能提升查询效率,减少数据传输。1.避免使用select *,列出必要列以增强可读性和安全性;2.结合where和join优化查询逻辑,减少全表扫描;3.合理创建索引以加速检索但需权衡写入性能;4.使用explain分析执行计划定位性能瓶颈;5.用coalesce处理n…

    2026年10月6日 • 用户投稿
    100
  • Java中实现数字敏感的自然排序

    Java中实现数字敏感的自然排序Java中实现数字敏感的自然排序Java中实现数字敏感的自然排序Java中实现数字敏感的自然排序

    本文探讨了Java中字符串(特别是包含数字的字符串,如文件名或版本号)默认排序行为的局限性,即“Test11”会排在“Test2”之前。针对Java标准库Collator缺乏内置数字敏感排序选项的问题,文章介绍了如何利用第三方库alphanumeric-comparator实现人类友好的自然排序,并…

    2026年10月6日 • 用户投稿
    000
  • 日本也怕卡脖子 自研AI芯片比肩NVIDIA H200显卡

    日本也怕卡脖子 自研AI芯片比肩NVIDIA H200显卡日本也怕卡脖子 自研AI芯片比肩NVIDIA H200显卡日本也怕卡脖子 自研AI芯片比肩NVIDIA H200显卡日本也怕卡脖子 自研AI芯片比肩NVIDIA H200显卡

    快科技9月6日消息,此前我们曾报道,日本正计划研发性能高达百倍的下一代Z级AI超算FugakuNEXT,预计于2030年正式亮相,其强大算力主要依托NVIDIA尚未发布的下下代GPU技术。 然而,在AI技术成为全球科技竞争核心的背景下,日本并不满足于依赖外部供应。即便目前能够采购NVIDIA最先进的…

    2026年10月6日 • 用户投稿
    1000
  • Spring Cloud Gateway自定义过滤器的开发指南

    Spring Cloud Gateway自定义过滤器的开发指南Spring Cloud Gateway自定义过滤器的开发指南Spring Cloud Gateway自定义过滤器的开发指南Spring Cloud Gateway自定义过滤器的开发指南

    自定义spring cloud gateway过滤器的核心方式是实现abstractgatewayfilterfactory。首先定义config类承载配置参数,接着覆写apply方法返回gatewayfilter实例并编写filter逻辑,访问serverwebexchange进行请求/响应处理,…

    2026年10月6日 • 用户投稿
    200
  • 共创共享 “MagicOS创享家”打造用户交流新范本

    共创共享  “MagicOS创享家”打造用户交流新范本共创共享  “MagicOS创享家”打造用户交流新范本共创共享  “MagicOS创享家”打造用户交流新范本共创共享  “MagicOS创享家”打造用户交流新范本

    摘要: 唯有以“听劝”为驱动持续进化,才能真正锚定产品迭代的核心价值方向。 正文: 8月底,成都宽窄巷子再度成为焦点。 这里不仅有年轻人热衷的Live演出,亲子家庭可以共赏动画影片,游戏发烧友能线下组队开黑,AI科技也变得触手可及——边逛边玩、打卡互动、与热门IP零距离接触……一向以潮流文化聚集地著…

    2026年10月6日 • 用户投稿
    200

发表回复

登录后才能评论
关注微信