设计模式详解(六):适配器模式——Adapter

目录导航

  • 适配器模式及其作用
    • 现实生活举例
  • 适配器模式的好处
  • 适配器模式的实现
    • 关系图
    • 实现步骤
  • 适配器模式的适用场景
  • 适配器模式示例

适配器模式及其作用

适配器模式是一种结构型设计模式。所谓结构型是指在代码结构方面的设计模式。适配器模式作为中间层,可以让交互接口不兼容的两个类或模块间正常交互协作。双方只面向适配器工作,无需关心适配器的另一端是谁及其工作方式。

现实生活举例

苹果电脑是没有USB插孔的,如果想要连接USB插头的设备,必须使用适配器。对于苹果电脑来说,与满足自身接口协议的适配器交互,不知道也不关心在适配器的另一端的设备的交互协议是怎样的。对于USB设备来说,只与适配器的USB插口交互,同样也不关心另一端的情况。在这里插入图片描述

适配器模式的好处

  • 可以让接口不兼容的两个模块交互。当交互的双方接口不兼容时,如果不愿修改已有代码的功能,因为变更意味着风险,可能引入bug,另外,有可能根本没有权限修改,比如一方是第三方类库。此时使用适配器模式,可以让双方无缝对接。
  • 单一职责。交互的双方专注于自己的主责,将交互设计与数据转换分离到Adapter中。

适配器模式的实现

关系图

交互主动方称为Client,交互被动方称为Service。
在这里插入图片描述

实现步骤

  1. 根据交互主动方Client所要求的交互方式和数据格式,声明Adapter接口,定义一组交互方法。
  2. 定义一个Adapter类,内部持有一个Service对象,所有的交互方法基于Service的功能实现。
  3. Client内部持有一个成员变量,类型为Adapter接口类型,可接收任何遵循Adapter接口的对象。
  4. 当不同的Service想提供服务时,创建新的Adapter接口实现类,基于该Service,遵循Adapter接口实现服务功能。

适配器模式的适用场景

  • 想要接口不兼容的两方交互,而不用修改两方的代码。可以使用适配器作为中间者,建立沟通的桥梁
  • 设计一个工具类或功能模块,根本无法预知交互方的交互方式及数据格式,但自身的工作流程及依赖功能已知,此时可将依赖的功能抽象成适配器接口,完成自己的实现。想要与之沟通的类或模块,创建遵循该适配器接口的适配器,提供相应功能。

适配器模式示例

Android中,RecyclerView便使用了适配器模式。RecyclerView作为UI组件,只负责展示数据,至于数据的来源,获取方式(如数据库、网络、内存),完全不关心,也无法预知。所以定义了获取数据的Adapter接口,想要为Recycler提供数据,需定义一个类,实现Adapter接口,提供展示的数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Lightweight Robust Size Aware Cache Management——论文泛读

TOC 2022 Paper 论文阅读笔记整理 问题 现代键值存储、对象存储、互联网代理缓存和内容交付网络(CDN)通常管理不同大小的对象,例如,Blob、不同长度的视频文件、不同分辨率的图像和小文件。在这种工作负载中,大小感知…

【云原生】Kubernetes----PersistentVolume(PV)与PersistentVolumeClaim(PVC)详解

目录 引言 一、存储卷 (一)存储卷定义 (二)存储卷的作用 1.数据持久化 2.数据共享 3.解耦 4.灵活性 (三)存储卷的分类 1.emptyDir存储卷 1.1 定义 1.2 特点 1.3 示例 2.hostPath存储卷 2.1 …

NVR对接三方相机预览黑屏问题案例

一、 问题现象 【问题现象】NVR接入三方相机,通道状态显示在线,但本地、web预览显示黑屏。更换H.264,H.265均预览黑屏,且NVR侧的萤石云手机APP预览报错260025。 【现场拓扑】现场拓扑如下 (1) IPC使用onvif协议添加至NVR&#xff…

YOLOv5改进 | 主干网络 | 用repvgg模块替换Conv【教程+代码 】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 尽管Ultralytics 推出了最新版本的 YOLOv8 模型。但YOLOv5作为一个anchor base的目标检测的算法,YOLOv5可能比YOLOv8的效果更好。…

IC617 虚拟机下载 RHEL6_ic617_hspice2015_spectre15

下载地址: 链接:https://pan.baidu.com/s/1kFEkq-SVkpSXcSS49THkiA?pwdtpm8 提取码:tpm8

tomcat学习--部署java项目

主流开发项目,springboot框架下,jar部署java传统的tomcat发布war包 一 什么是tomcat? 是一个用于运行java程序的软件,发布的时候:开发将源码使用maven打包,生产war包 二 安装tomcat tomcat是java写的&a…

磁带存储:“不老的传说”依然在继续

现在是一个数据指数增长的时代,根据IDC数据预测,2025年全世界将产生175ZB的数据。 这里面大部分数据是不需要存储的,在2025预计每年需要存储11ZB的数据。换算个容易理解的说法,1ZB是10^18Bytes, 相当于要写5556万块容量18TB的硬盘…

【介绍下运维开发】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

【1.文件和目录相关(上)】

一、Linux的文件系统结构 1、Linux文件系统就是一个树形的分层组织结构。 2、文件系统层次结构标准FHS:用于规范文件目录命名和存放标准。 (1)/bin:是二进制英文缩写。 (2)/boot:存放的是系统启动时要用到的程序。 …

个股期权开户的准入条件

今天带你了解个股期权开户的准入条件。个股期权是一种金融行生品,投资者可以通过购买期权来获得在未来某个时间点以约定价格买入或卖出某只股票的权利,但不承担义务。 个股期权开户的准入条件 场外个股期权(OTC股票期权)相对于交…

【后端开发】服务开发场景之分布式(CAP,Raft,Gossip | API网关,分布式ID与锁 | RPC,Dubbo,Zookeeper)

【后端开发】服务开发场景之分布式(CAP,Raft,Gossip | API网关,分布式ID与锁 | RPC,Dubbo,Zookeeper) 文章目录 1、如何设计一个分布式系统?(底层原理)理论&a…

服务器感染了. rmallox勒索病毒,如何确保数据文件完整恢复?

导言: 近年来,随着信息技术的飞速发展,网络安全问题日益凸显。其中,勒索病毒作为一种严重的网络威胁,对个人和企业数据造成了巨大的威胁。本文将重点介绍.rmallox勒索病毒的特点、传播途径以及应对策略,旨…

MySQL的安全性

给root用户设置密码 点击用户--下面三个账号双击--进行编辑 修改密码--修改完进行保存 关闭数据库后连接不上 重新编辑,设置密码 新建账号 填入信息--保存(主机哪里要选择%) 连接这个新的账号 点击连接--填写连接的名称,地址&…

如何编写高效的单片机代码?

单片机的程序比软开少一些,真正想编写出高效的代码,还是要积累很多年的。 在做研发工程师的10年里,我经历过几个公司,看过很多工程师写的代码,但真正能让我跪着看完的,极少。哪怕是大厂工程师,也…

【深度好文】AI企业融合联盟营销,做的好就是最大赢家!

AI工具市场正在迅速发展,现仍有不少企业陆续涌出,那么如何让你的工具受到目标群体的关注呢?这相比是AI工具营销人员一直在思考的问题。 即使这个市场正蓬勃发展,也无法保证营销就能轻易成功。AI工具虽然被越来越多人认可和接受&a…

短视频矩阵系统源码---开发BS架构B/S(Browser/Server Architecture)架构

短视频矩阵系统源头开发------- 第一款叫做筷子科技,这个筷子科技剪辑和发布都是没有问题的,但是前一段时间他的剪辑发个公告,每个账号只能发两条,另外它的唯一缺点就是它成本比较高的,入门门槛应该在12800左右&#…

Linux学习笔记(epoll,IO多路复用)

Linux learning note 1、epoll的使用场景2、epoll的使用方法和内部原理2.1、创建epoll2.2、使用epoll监听和处理事件 3、示例 1、epoll的使用场景 epoll的英文全称是extend poll,顾名思义是poll的升级版。常见的IO复用技术有select,poll,epo…

HaloDB 的 Oracle 兼容模式

↑ 关注“少安事务所”公众号,欢迎⭐收藏,不错过精彩内容~ 前倾回顾 前面介绍了“光环”数据库的基本情况和安装办法。 哈喽,国产数据库!Halo DB! 三步走,Halo DB 安装指引 ★ HaloDB是基于原生PG打造的新一代高性能安…

海医大三院使用先进血管外科微创技术成功救治危重主动脉夹层患者

近日,上海东方肝胆外科医院血管外科周建教授团队采用主动脉弓分支型一体化移植物联合体外开窗技术,成功救治复杂危重主动脉夹层患者,为上海嘉定首例,彰显了上海东方肝胆外科医院血管外科的优势与特色。 患者谢先生,72岁,两周前突发剧烈胸背部撕裂样疼痛,休息后症状未能得到缓解…

MyBatis的坑(动态SQL会把0和空串比较相等为true)

文章目录 前言一、场景如下二、原因分析1. 源码分析2. 写代码验证 三、解决办法代码及执行结果如下 总结 前言 在开发过程中遇到MyBatis的动态SQL的if条件不生效的情况,但经过debuger发现并不是参数问题,已经拿到了参数并传给了MyBatis,且从表…