设计模式|适配器模式(Adapter Pattern)

文章目录

  • 结构
  • 优点
  • 缺点
  • 示例
  • 装饰器和适配器有什么区别
  • 常见面试题

适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。这种模式通常用于解决两个已有接口之间不兼容的情况。适配器模式使得不兼容的接口能够协同工作,而无需修改已有的代码。这对于集成已有代码库或者第三方组件时非常有用,因为它可以帮助在不破坏现有接口的情况下实现必要的功能补充。

结构

在适配器模式中,有三个主要角色:

  1. 目标接口(Target Interface):客户端所期望的接口,适配器将会实现这个接口。
  2. 适配器(Adapter):适配器是一个类,它实现了目标接口,并且包装了一个或多个被适配的类的对象。适配器通过调用被适配类的方法来实现目标接口。
  3. 被适配者(Adaptee):被适配的类,它拥有客户端所需的功能,但是其接口与客户端期望的接口不兼容。

优点

  1. 解耦性增强: 适配器模式可以将客户端代码与具体的被适配者类解耦,使得它们之间的关系更加灵活,降低了耦合度。
  2. 复用性提高: 适配器模式可以重用现有的类,而不需要修改其代码,只需编写一个适配器类即可。
  3. 灵活性增强: 可以在不修改现有代码的情况下引入新的功能,只需要编写适配器类来适配新的功能即可。
  4. 增加了系统的扩展性: 当需要添加新的被适配者类时,可以很容易地编写新的适配器来适配这些类,而不会影响现有的代码。

缺点

  1. 增加了代码复杂性: 引入适配器会增加代码的复杂性,特别是在系统中存在大量的适配器时,会增加代码的维护成本。
  2. 过多使用可能会导致系统变得混乱: 过度使用适配器模式可能会导致系统中存在大量的适配器类,使得系统变得混乱难以理解。
  3. 性能损耗: 在适配器模式中,由于需要进行额外的适配处理,可能会引入一定的性能损耗,尤其是在处理大量数据时。

综上所述,适配器模式在某些情况下能够提供方便和灵活性,但在设计时需要权衡其优缺点,避免过度使用导致系统复杂性增加。

示例

假设有一个 Rectangle 类,我们希望能够使用它来计算面积,但是它的方法名是 calculatePerimeter() 而不是我们期望的 calculateArea()。我们可以使用适配器模式来解决这个问题。
首先,让我们创建目标接口 Shape

// 目标接口
interface 

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

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

相关文章

RK3399广告机主板板刷armbian--改固件方法

最近入捭几块RK3399的广告机板子,没资料,没固件,只有原厂android固化在板子上。于是想办法刷一个armbian上去。 armbian是简化的linux系统,整个固件只有二个部分,分别是启动分区与系统分区。较后期版本可以直接换dtb&…

在抖音做“奸商”!虽说不光彩,但能“发大财”!

打工人都知道的一句话:“做老板的都是周扒皮!公司最赚钱的就是老板” 虽然手底下的员工都在骂老板压榨员工,但如果有一个让员工当老板的机会,我相信没有人会选择继续当牛做马 今天我就来给大家介绍一个:我正在做的“…

nginx多站点虚拟路径配置

nginx多站点配置 前言:我们有时会遇到一个ng服务,需要配置多个站点的需求。如 http://pingan.com/site1 、http://pingan.com/site2 两个站点,通过不同目录区分站点。 如果不对ng做相应配置,那么会有一些问题: site…

Flask快速搭建文件上传服务与接口

说明:仅供学习使用,请勿用于非法用途,若有侵权,请联系博主删除 作者:zhu6201976 一、需求背景 前端通过浏览器,访问后端服务器地址,将目标文件进行上传。 访问地址:http://127.0.0…

ChromeOS 中自启动 Fcitx5 和托盘 stalonetray

ChromeOS 更新的飞快,旧文章的方法也老是不好用,找遍了也没找到很好的可以开机自启动 Linux VM 和输入法、托盘的方法。 研究了一下(不,是很久),终于找到个丑陋的实现。 方法基于 ChromeOS 123.0.6312.94…

淄博、哈尔滨、天水…社交媒体助推下的网红城市能“长红”吗?

烧烤卷饼带火山东传统工业小镇淄博; 冰雪狂欢让东北的哈尔滨在寒冬爆火; 一碗麻辣烫让西北天水小城变“网红”…… 在刚刚过去的清明假期,甘肃天水可谓是“热辣滚烫”,在春暖花开时节,迎来了属于它的春天。而被人们逐…

在Spring Boot中使用POI完成一个excel报表导入数据到MySQL的功能

最近看了自己玩过的很多项目,忽然发现有一个在实际开发中我们经常用到的功能,但是我没有正儿八经的玩过这个功能,那就是在Spring Boot中实现一个excel报表的导入导出功能,这篇博客,主要是围绕excel报表数据导入进行&am…

《由浅入深学习SAP财务》:第2章 总账模块 - 2.6 定期处理 - 2.6.1 月末操作:自动清账

2.6.1 月末操作:自动清账 清账是指会计科目的借贷挂账后的核销,包括客户、供应商和实行未清项管理的总账科目等。 总账模块实行未清项管理的科目有GR/IR(Goods Receipt/Invoice Receipt)、银行存款-清账(较少使…

中国历年GDP统计-探数API统计

数据介绍 时间维度:1978年-2021年 单位:亿元 该数据来源于国家统计局发布的中国统计年鉴2021,为按当年价格计算的中国历年GDP以及人均GDP。 数据说明: 数据来源于国家统计局。

MATLAB的System Composer支持的功能和在汽车软件架构设计中的应用

MATLAB的System Composer支持的功能主要包括基于模型的系统工程和软件架构建模。它允许用户定义和分析架构,通过创建层次化的模型来表示系统的功能、逻辑或物理分解,这些模型使用组件、端口和连接器来构建。System Composer还支持将需求链接到架构和测试用例上,以及在细化架…

【教程】7代核显直通HDMI成功输出 PVE下玩AIO最有性价比的机器

大家好,我是村雨Mura,好久没写教程了,本期是7代核显直通,重点在于HDMI输出画面 本教程理论上适用于4代以后intel带核显CPU,如果你有直通成功经验欢迎评论区分享 前面有点啰嗦,想直接看教程,直…

首个AI营销大模型行业应用标准即将发布,助推行业标准化!

当前生成式人工智能、大模型技术在各行业加快落地。为推动先进技术在产业领域的创新实践,近日,中国信息通信研究院(以下简称「信通院」 )AI研究中心成功组织召开了AIGC产品系列及营销行业应用标准研讨会。东信作为推动营销行业大模…

iframe嵌入Vue页面实现免登方法

简介:实现一个功能需要使用iframe嵌入其它系统内部的一个页面,但嵌入后出现一个问题,就是一打开这个页面就会自动跳转到登录页,原因是被嵌入系统没有登录(没有token)肯定不让访问内部页面的,本文就是解决这个问题的。 …

【网安播报】GitHub上的恶意Visual Studio 项目推送 Keyzetsu 恶意软件

1、GitHub 上的恶意 Visual Studio 项目推送 Keyzetsu 恶意软件 威胁行为者正在滥用 GitHub 自动化功能和恶意 Visual Studio 项目来推送“Keyzetsu”恶意软件的新变种并窃取加密货币付款。攻击者创建了GitHub 存储库,并使用各种方法来人为地提高其在平台上的受欢迎…

idea 卡怎么办

设置内存大小 清缓存重启 idea显示内存全用情况 右下角

Array、Object、String、Number、Math常用方法

一、Array方法 方法参数返回值描述以下Api会修改原属组pushitem1, item2, ...数组新长度向数组的末尾添加一个或多个元素,并返回新的长度pop删除的元素删除数组的最后一个元素,并返回删除的元素unshiftitem1,item2, ...数组新长度向数组的开头添加一个或…

Scala实战:打印九九表

本次实战的目标是使用不同的方法实现打印九九表的功能。我们将通过四种不同的方法来实现这个目标,并在day02子包中创建相应的对象。 方法一:双重循环 我们将使用双重循环来实现九九表的打印。在NineNineTable01对象中,我们使用两个嵌套的fo…

Cache的替换策略LRU和一致性协议

LRU(Least Recently Used)替换策略和一致性协议是计算机内存管理中至关重要的组成部分,它们对于确保缓存性能和数据一致性起到了关键作用。下面将详细介绍LRU替换策略和一致性协议的工作原理、应用场景以及相关的设计考量。 LRU替换策略 LR…

2024年天津专升本成绩查询、分数复核的重要通知

2024年天津高职升本科考试考生:事关成绩查询查询、分数复核和,重要事项早知道 一、成绩查询 2024年天津市高职升本科文化课考试的评卷及成绩合成工作已于日前结束,自4月12日14时起,考生可通过以下方式查询考试成绩。1&#xff0…

代码随想录 Day18 字符串 | LC151 反转字符串中的单词 卡码网55 右旋字符串

四、反转字符串中的单词 题目: 力扣151:反转字符串中的单词 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单…