23种设计模式:适配器模式(最强解析!!!)

2023-11-16

适配器模式是23种设计模式之一。

 

适配器模式作用

适配器模式的作用,在于将一个类的接口变换为客户端所期待的另一种接口,使得原本因为接口不匹配而无法一起工作的两个类能在一起工作。

也就是说,适配器模式解决的是接口兼容性问题。

适配器模式实现方式

适配器模式依据实现方式的不同,可以划分为3种:类适配器、对象适配器和接口适配器。

(一)类适配器

类适配器类图如下:

 类适配器主要由三部分构成:

  • Target:目标角色,也即被转换后的接口;
  • Adaptee:源角色,需要被转换的接口;
  • Adapter:适配器,负责将Adaptee转换为Target。

使用示例如下:(假定TypeC接口输出的数据格式就是TypeC格式,可能不是,只是为了说明如何使用)

public interface VgaFormatMessage {	// target,投影仪直接使用VGA来获得数据的,需要Vga格式的数据
	public String getVgaFormat();
}

public class TypeCFormatMessage {	// Adaptee:手机输出的TypeC格式的数据
	public String typecFormat() {
		return "typeC格式的数据";
	}
}

public class TypeCtoVgaFormatMessageAdapter extends TypeCFormatMessage implements VgaFormatMessage{	
    // Adapter:将TypeC格式的数据转换为VGA格式的数据
	@Override
	public String getVgaFormat() {
		String typeCFormatMessage = super.typecFormat();//获得TypeC格式的数据
		String vgaFormatMessage = "转换成VGA格式数据:" + typeCFormatMessage;//将TypeC格式的数据转换为VGA格式数据
		return vgaFormatMessage;
	}
}
//适配器的作用到上面其实就已经结束了,下面只是使用,main方法中是测试
public class Projector {
	public void getVgaFormatMessage(VgaFormatMessage vgaFormatMessage) {
		String message = vgaFormatMessage.getVgaFormat();
		System.out.println(message);
	}
	//测试
	public static void main(String[] args) {
		Projector projector = new Projector();
		projector.getVgaFormatMessage(new TypeCtoVgaFormatMessageAdapter());
	}
}

(二)对象适配器

待更~

(三)接口适配器

待更~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

23种设计模式:适配器模式(最强解析!!!) 的相关文章

  • Spring Security 通过并发登录尝试将用户锁定

    我是安全新手 遇到了一个问题 该问题导致用户帐户被锁定 只有重新启动应用程序才能修复它 我有一个带有 spring security 4 0 2 RELEASE 应用程序的 spring boot 1 3 0 BUILD SNAPSHOT
  • 如何在Java 8中实现Elvis运算符?

    我有一个经典的 Elvis 运算符 案例 其中我调用每个可能返回 null 的方法并将它们链接在一起 thing nullableMethod1 a nullableMethod2 b nullableMethod3 在 Java 8 中
  • 实现与扩展:何时使用?有什么不同?

    请用易于理解的语言进行解释或提供某些文章的链接 extends is for 延伸一类 implements is for 实施一个接口 接口和常规类之间的区别在于 在接口中您不能实现任何声明的方法 只有 实现 接口的类才能实现方法 C 中
  • 在 IntelliJ 上进行 Google App Engine Java 开发?

    令人烦恼的是 Google App Engine 已成为其中的另一个项目 他们只发布 Eclipse 插件 如 Spring Webflow 而我更喜欢 IntelliJ 你能用IntelliJ成功运行本地测试环境吗 并调试 部署本地或实时
  • 使用 Spring Data REST 处理自定义异常 (i18n)

    我正在使用 Spring Boot 1 5 4 和 Spring JPA Spring Data REST HATEOAS 我正在寻找一种最佳实践 Spring 方式 来自定义异常 Spring Data REST 正在管理添加 i18n
  • 如何识别 Java 中的不可变对象

    在我的代码中 我正在创建一个对象集合 这些对象将由各种线程以只有在对象不可变的情况下才安全的方式访问 当尝试将新对象插入到我的集合中时 我想测试它是否是不可变的 如果不是 我将抛出异常 我能做的一件事是检查一些众所周知的不可变类型 priv
  • Java Spring 应用程序存在内存泄漏。系统非堆内存不断增加

    我已使用 yourkit 分析器监视我的 Web 应用程序 保留最大大小的主要对象是 SessionFactoryImpl webappclassloader 和 CGlib 对象显示 spring crone调度程序会导致内存泄漏吗 我尝
  • 从关卡堆栈中获取相对比例的数学

    为这个可怕的标题道歉 我花了 10 分钟试图用一句话来解释这一点 但失败了 虽然提示这个问题的应用程序是用Java Android 编写的 但我认为它非常通用并且适用于任何语言 欢迎使用伪代码 或简单的英语 回复 我不确定是否应该标记所有通
  • SimpleDateFormat 将 lenient 设置为 false 时出现异常

    为什么这段代码会抛出无法解析日期的异常 SimpleDateFormat f new SimpleDateFormat yyyy MM dd T HH mm ss 000Z f setLenient false String dateStr
  • 是否可以为 azure blob 存储中的给定目录生成具有写入权限的 SAS(共享访问签名)

    我们的 blob 存储帐户结构 容器名称 simple 在这个容器内我们有 blob aa one zip aa two zip bb ss zip bb dd zip 是否可以生成对aa 目录 有写权限 但对bb 目录 没有访问权限的SA
  • 在Java中多次读取System.in会导致IOException?

    我正在尝试创建一个小命令行游戏来强化我在过去几个月中在 Java 中学到的一些东西 我正在尝试创建一个名为 readInput 的方法 它返回一个我可以一次又一次调用的字符串 第一次它工作正常 但第二次它会导致 IO Exception 如
  • 如何使用云打印打印Android活动显示

    我正在尝试将 Google 云打印实现到应用程序中 遵循集成指南 https developers google com cloud print docs android 我试图通过打印 google com 来保持基本 单击我创建的打印按
  • 在服务器内部调用 Web 服务

    我有一个网络服务 getEmployee 当传递 id 时 它会获取单个员工的员工详细信息 同一服务器上的另一个 Web 服务 getEmployeeList 当传递一个部门时 它会获取整个员工列表 这将获取部门的 ID 然后调用 getE
  • 无法映射 ftl 文件中的 jsonRequest 属性

    我想在 FTL 文件中映射下面的 json 文件市场和子市场字段 但是当我尝试下面的代码时 它没有映射 有人可以帮助我吗 我从 2 天开始就无法映射它 Json请求 ProcessOrderRequest prevalidationMode
  • Google Place Api:来自此 Android 客户端应用程序 com.package.name 的请求被阻止

    我在用PlaceAutocompleteFragment当我单击搜索字段 PlaceAutocompleteFragment 对话框消失时 我收到此错误 errors domain global re ason forbidden mess
  • 从命令行运行 Maven 插件的语法是什么。

    我看到这里已经有人问过这个问题 如何从命令行执行maven插件 https stackoverflow com questions 12930656 how to execute maven plugin from command line
  • Selenium - 等待网络流量

    我们将 Selenium 与 Java API 和一些 Javascript 用户扩展一起使用 我们在应用程序中使用了大量 AJAX 调用 我们的许多测试随机失败 因为有时 AJAX 调用完成得比其他时候慢 因此页面未完全加载 我们通过等待
  • H2 - (相当)长的 INSERT 失败,错误 42000

    H2 内存中 插入 错误 42000 尝试过版本 1 4 196 1 4 197 1 4 199 我还尝试在 H2 服务器 本地 上执行 INSERT 也失败 给出错误的行 抱歉 但出于安全原因 我无法生成更多 INSERT INTO tb
  • 如何从spark中的hbase表中获取所有数据

    我在 hbase 中有一个大表 名称为 UserAction 它具有三个列族 歌曲 专辑 歌手 我需要从 歌曲 列族中获取所有数据作为 JavaRDD 对象 我尝试了这段代码 但效率不高 有更好的解决方案来做到这一点吗 static Spa
  • 如何使用剪辑来减少绘画时间?

    我正在尝试使用 Clip 来减少 CPU 负载 但剪辑在屏幕上留下了一些我似乎无法摆脱的垃圾 另外 打开和关闭剪辑似乎对 CPU 负载没有影响 在任一情况下 大部分时间似乎都花在重绘管理器和绘制缓冲图像上 import static jav

随机推荐

  • ADC学习系列(一):ADC基础概念

    本章主要是进行ADC的基础概念学习 从模拟和数字信号进行入手 分析各自的优缺点和应用场合 从而引出数模转换的重要性 紧接着提到了ADC部分最重要的奈奎斯特采样定理 了解采样频率和被测信号频率之间的关系 最后介绍了ADC的采样保持放大电路 作
  • Python全栈开发工程师 第一模块作业

    1 编程题 100分 第一模块作业 1 学习计算机运行原理 绘制一张python代码从输入电脑 到处理 到输出结果的整个流程图 2 构建自己的python编程环境 整个过程做笔记 把截图放到word里提交 3 写下自己学习编程的目标 建议按
  • 【IntelliJ IDEA】升级之后又要激活的解决方法

    用了几个月的idea 在它升级之后 又不听话了 启动时候需要重新激活 解决方法 1 找到C Windows System32 drivers etc 下的hosts文件 在文件中添加如下 0 0 0 0 account jetbrains
  • VC++ CComboBox自绘

    头文件定义 CSWComboBox h pragma once class CSWComboBox public CComboBox DECLARE DYNAMIC CSWComboBox public CSWComboBox CSWCom
  • 传奇GOM引擎合区工具源码

    传奇GOM引擎合区工具源码 自己写的一点小项目 所以在此给大家分享 包含MFC框架 Windows消息机制原理 WIN32API调用 还有找了半天的后台组合按键消息 合区功能基本都有 是学习MFC的一个好的小项目 VS2013 unicod
  • python中dataframe将一列中的数值拆分成多个列

    起初的数据是这样的 想将page no这一列拆分成多个列 然后将其中的值都作为列名 想要做成的结果如下图 也就是统计每个id下各个page no出现的次数 实现的思路是先对page no这一列进行one hot编码 将一列变为多列 然后再用
  • mybatis-plus3.5.2分页插件无效解决方案

    解决问题思路 测试分页插件的时候发现sql语句没有添加limit并返回的是所有数据 排查得知mybatis plus版本为3 5 2 搜索资料得知旧版本的PaginationInterceptor已经过时 官方推荐使用PaginationI
  • Python基本语法,python入门到精通

    python你不去认识它 可能没什么 一旦你认识了它 你就会爱上它 Python基本语法 1 定义变量 代码正文 x 1 y 2 z x y Python定义变量的方式呢很简单 就是上面这段代码 相信只要稍微懂点数学的人都能看懂这段代码的含
  • 微信终于支持 H5 跳转 App &小程序

    继小程序灰度测试分享朋友圈刷屏后 滴滴滴 这 闲着也闲着 顺藤摸瓜点了进去 好家伙 产品小姐姐写这个文案还是太含蓄了 我猜有可能是老干妈还没吃够 根据刀哥多年写代码要看文档的经验来看 证实了这次更新不仅支持了打开小程序 连app也顺带支持了
  • 第17节-PhotoShop基础课程-画笔修复工具

    文章目录 前言 1 画笔工具 1 基本操作 2 工具选项 1 不透明度 2 流量 3 平滑 2 画笔大小工具栏大小设置 4 笔刷 2 铅笔工具 3 颜色替换工具 批量替换颜色 4 混合器画笔工具 人像精修 前言 画笔工具的使用 1 画笔工具
  • BottomSheetDialogFragment圆角

    自己使用BottomSheetDialogFragment时 想实现上方圆角 布局设置了圆角的背景后 需要给dialog的北京设置为透明 才能有圆角的效果 网上其他的文章都是这么实现的 dialog getWindow findViewBy
  • 小程序发布上线全流程(包含小程序怎么通过审核)

    小程序在开发完成后 需要上传代码 设为体验版本 功能测试 提交审核 发布上线这几个基本步骤 接下来用自己的亲身经历一一详细介绍 小程序发布上线全流程 1 上传代码 在微信开发者工具的右上角上传处上传全部代码 如下图 如果小程序中涉及到一些r
  • 程序kill后仍占用GPU

    sc yolov5 zqchen gpurtx02 ultralytics gpustat gpurtx02 Thu Aug 24 09 18 31 2023 470 74 0 Quadro RTX 6000 41 C 0 0 24220
  • 2-需求分析

    一 需求收集 1 需求概念 以下常见三种情形 提问题 目的不明确 明确困境 提目的 目的明确 解决方案不明确 提方案 目的明确 方案明确 概念 本质是用户的预期和现状之间的差异产生的需求 在提出需求时 往往会基于目的描述问题 想法或建议 往
  • python代码~考研祝福

    完整代码如下所示 from turtle import speed 2 Turtle screen delay 0 def go to x y up goto x y down def ring a b c d for i in range
  • STM32F103小容量、中容量和大容量单片机介绍

    一 小容量 中容量和大容量表示的型号 STM32F103x4和STM32F103x6被归为小容量产品 闪存小于等于32K STM32F103x8和STM32F103xB被归为中等容量产品 闪存小于等于128K STM32F103xC STM
  • diskgenius创建efi分区_怎么创建efi系统分区?efi系统分区创建教程

    文章导读 近两年出来的的电脑不管是新台式机还是笔记本电脑 绝大多数是uefi主板 要采用对应的硬盘分区是gpt格式的 所以我们一定要记得采用efi引导对应的分区类型一定是gpt分区 EFI分区是GPT磁盘分区表里面的一个必要分区 是独立于系
  • win10上安装python3.9.0+robotframework

    win10上安装python3 9 robotframework python3 9 0下载安装 robotframework安装 wxpython安装 ride安装 python3 9 0下载安装 下载地址 python3 9 0下载地址
  • 【机器实战学习】朴素贝叶斯 python代码实现

    朴素贝叶斯 输入数据创造词汇表 代码实现 coding UTF 8 def loadDataSet 创建了一下实验样本 return 词条且分的文档集合 类别标签的集合 自动检测侮辱性的语言 postingList my dog has f
  • 23种设计模式:适配器模式(最强解析!!!)

    适配器模式是23种设计模式之一 适配器模式作用 适配器模式的作用 在于将一个类的接口变换为客户端所期待的另一种接口 使得原本因为接口不匹配而无法一起工作的两个类能在一起工作 也就是说 适配器模式解决的是接口兼容性问题 适配器模式实现方式 适