设计模式05----适配器模式

news/2024/11/19 19:42:22/文章来源:https://www.cnblogs.com/yaoweijun/p/18197691

适配器模式:
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口协同工作。这种模式涉及到一个单独的类,该类负责将一个类的接口转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以一起工作。
例如:
USB转接口就是适配器,它能够将各种不同类型的接口(如HDMI、VGA、以太网等)转换为USB接口,这样无论是哪种类型的设备,只要连接到这个转接口,就可以通过统一的USB接口与计算机等其他设备通信。这里的USB接口就是目标接口,而HDMI、VGA等接口就是待适配的接口

适配器模式通常是由三个角色组成:
原接口 目标接口 适配器
适配器模式的角色:
目标(Target)接口:当前系统期望使用的接口,它定义了客户端需要使用的方法。
待适配的类(Adaptee):一个或多个现有的类,它们的接口与目标接口不兼容。
适配器(Adapter)类:一个中介类,它实现了目标接口,并通过私有方式包含一个待适配的类的实例,适配器类负责将目标接口调用转换为对待适配的类实例的调用。

适配器模式的分类:
类适配器模式:使用继承来实现适配器功能,适配器继承自待适配的类并实现目标接口。
对象适配器模式:使用组合来实现适配器功能,适配器内含待适配的类的实例,并实现目标接口。
适配器模式的实现步骤:
确定希望适配成的目标接口。
创建适配器类,实现目标接口。
在适配器类中添加一个私有变量,用于保存待适配的类的实例。
在适配器类中实现目标接口的方法,这些方法将调用待适配的类实例的对应方法。
客户端代码通过目标接口与适配器交互,无需知道待适配的类的具体实现。
适配器模式的优点:
透明性:客户端只需要与目标接口交互,无需关心适配器的内部实现。
灵活性:可以在不修改待适配的类的前提下,增加新的适配器,使得系统更具有扩展性。
重用性:可以重用现有的待适配的类,无需从头开始编写新的类。
适配器模式的缺点:
过多使用适配器可能会导致系统非常凌乱,特别是当多个适配器层叠时,可能会使得调试和跟踪问题变得复杂。
违反开闭原则:在类适配器模式中,由于使用了继承,当待适配的类需要改变时,适配器可能也需要改变。
适用场景:
当你想使用一个已经存在的类,但其接口不符合你的需求时。
当你需要创建一个可重用的类,该类可以与多个不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
适配器模式在软件设计中非常常见,特别是在需要整合旧有系统与新系统,或是第三方库与现有代码库时。通过使用适配器,可以在不修改现有代码的情况下,使这些系统或库能够一起工作。






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

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

相关文章

基于时间的断路器

1 新建一个微服务模块 我们在cloud-payment-service模块中新增一个controller以提供给其它微服务模块调用。 @RestController public class PayCircuitController {@GetMapping("/pay/circuit/{id}")public String myCircuit(@PathVariable("id") Integer …

计算机体系结构-Booth乘法

本专栏用于记录计算机体系结构学习笔记原理解释 电路实现 以Radix-4 Booth编码为例,Booth乘法的核心是部分积的生成,需要生成\(N/2\)个部分积,每个部分积与\([X]_补\)有关,存在\(-X,-2X,+X,+2X,0\) 这五种可能,其中减去\(X_{补}\)的操作可以认为是按位取反的\(X_{补}\)在末…

使用 JS 实现在浏览器控制台打印图片 console.image()

在前端开发过程中,调试的时候,我门会使用 console.log 等方式查看数据。但对于图片来说,仅靠展示的数据与结构,是无法想象出图片最终呈现的样子的。虽然我们可以把图片数据通过 img 标签展示到页面上,或将图片下载下来进行预览。但这样的调试过程实在是复杂,何不实现一个…

渗透测试快速启动指南-全-

渗透测试快速启动指南(全)原文:Quick Start Guide to Penetration Testing 协议:CC BY-NC-SA 4.0一、NMAP 简介 漏洞评估和渗透测试变得越来越重要,尤其是在最近几年。组织通常拥有存储敏感数据的复杂资产网络。这些资产暴露在来自组织内部和外部的潜在威胁之下。为了全面…

『手撕Vue-CLI』编码规范检查

前言 这篇为什么是编码规范检查呢?因为这是一个很重要的环节,一个好的编码规范可以让代码更加清晰易读,在官方的 VUE-CLI 也是有着很好的编码规范的,所以我也要加入这个环节。 其实不管在哪个项目中,编码规范都是很重要的,像我们平日里的项目开发当中,我们也会使用 ESLi…

字节面试:MySQL什么时候 锁表?如何防止锁表?

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

CF1884D Counting Rhyme 题解

题目链接:CF 或者 洛谷 给个莫反题解,讲讲常规套路 题目要求满足没有 \(a_k \mid a_i 与 a_k \mid a_j\) 的 \((i,j)\) 的对数,显然即不存在 \(a_k \mid \gcd(a_i,a_j)\)。稍微拓展下,如果不存在整除多个数,那么显然不整除它们的 \(\gcd\) 即可,因为它们的公因数即为满足…

ITSM工作台:工程师效率与协同的新天地

在当今快节奏的IT运维领域,ITILDESK工作台脱颖而出,成为专为技术工程师量身打造的全能助手。这款平台不仅仅是一个工具集合体,它是一个精心设计的生态系统,旨在促进工程师的工作效率、团队协作与个人成长,为日常运维工作带来前所未有的便捷与智能。 一站式工作环境:从工…

HTML5中 drag 和 drop api

被拖放元素 -- A,目标元素 -- B。dragstart 事件主体是A,在开始拖放A时触发。 dragend 事件主体是A,在整个拖放操作结束时触发。 drag 事件主体是A,正在拖放A时触发(整个拖拽,drag事件会在被拖拉的节点上持续触发,相隔几百毫秒)。 dragenter 事件主体是B,在A进入某元素…

一些不错的地理题

2022年福建高考与土壤联系最密切的应该是植被 所以AB选项直接排除 然后的话30度的时候为什么大幅上升呢,主要是因为青藏高原 所以通过尺度也可以做这个题 10度的纬度,算是一个中等的尺度,而不应该是土壤植被这种小尺度大题意义类要去找主体、找问题 对你的意义 对我的意义 对…

项目管理之八大绩效域-------笔记(二)

八大绩效域详细解析 18.1 干系人绩效域跟干系人所有相关的活动.一、预期目标①与干系人建立高效的工作关系②干系人认同项目目标③支持项目的干系人提高了满意度,并从中收益④反对项目的干系人没有对项目产生负面影响三四是一个意思,就是支持你的人更支持你,反对你的人没有负面…

【日记】跟奇安信斗智斗勇,败下阵来(416 字)

正文今天一个客户都没有,让我快怀疑我们银行是不是要倒闭了……因为内外网 u 盘不知所踪,所以重新制了一个。深刻体会到了奇安信有多烂。有两个 u 盘,奇安信似乎把主控写坏了,插上电脑有反应,但是看不见盘符,磁盘管理也看不到。另一个也是这样,但后面莫名其妙好了。Wind…