11-适配器模式(Adapter)

意图

将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。
适配器模式属于结构模式。

类适配器模式(通过继承的方式实现适配器模式)

Adapter类,通过继承src类,实现dst类接口,完成src->dst的适配。

应用实例说明

以生活中充电器的例子来讲解适配器,充电器本省相当于Adapter,220V交流电相当于src(即被适配者),我们的dst(即目标)是5V直流电。
类图:
在这里插入图片描述

public class Voltage220V{public int output220V(){int src = 220;System.out.println("电压=" + src + "伏");return src;}
}
public interface IVotage5V {int output5V();
}
public class VoltageAdapter extends Voltage220V implement IVoltage5V {@Overridepublic int output5V(){int srv = output220V();return src/4;}
}
public class Phone {//充电public void chargin(IVotage5V ivotage5V){if(ivotage5V.output5V() == 5){System.out.printlin("电压为5V,可以充电");}else if(iVotage5V.output5V() > 5){System.out.println("电压大于5V,不能充电");}}
}
public class Client{public static void main(String[] args){System.out.println("===类适配器模式===");Phone phone = new Phone();phone.charging(new VoltageAdapter());
}
}

类适配器模式优缺点

  • Java是单继承机制,多以类适配器需要继承src类者一点算是一个缺点,因为者要求dst必须是接口,有一定局限性;
  • src类的方法在Adapter中都会暴露出来,也增加了使用的成本。
  • 由于其继承了src类,所以它可以根据需求重写src类的方法,使得Adapter的灵活性增强了。

对象适配器模式(使用聚合方式来实现适配器模式)

  • 基本思路和类的适配器模式相同,只是将Adapter类作修改,不是继承src类,而是持有src类的实例,以解决兼容性的问题。即:持有src类,实现dst类接口,完成src->dst的适配
  • 根据“合成复用原则”,在系统中尽量使用关联关系来代替继承关系。
  • 对象适配器模式是适配器模式常用的一种。
    类图:
    在这里插入图片描述
public class Voltage220V{public int output220V(){int src = 220;System.out.println("电压=" + src + "伏");return src;}
}
public interface IVotage5V {int output5V();
}
public class VoltageAdapter implement IVoltage5V {private final Voltage220V voltage220V;public VoltageAdapter(Voltage220V voltage220V){this.voltage220V = voltage220V;}@Overridepublic int output5V(){int srv = voltage220V.output220V();return src/4;}
}
public class Phone {//充电public void chargin(IVotage5V ivotage5V){if(ivotage5V.output5V() == 5){System.out.printlin("电压为5V,可以充电");}else if(iVotage5V.output5V() > 5){System.out.println("电压大于5V,不能充电");}}
}
public class Client{public static void main(String[] args){System.out.println("===类适配器模式===");Phone phone = new Phone();phone.charging(new VoltageAdapter());
}
}


以上示例引用自尚硅谷设计模式教程
https://www.bilibili.com/video/BV1G4411c7N4?p=62&spm_id_from=pageDriver&vd_source=3141b9fdb12c5901aa70919c50575543

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

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

相关文章

vulnhub靶场之DC-8

一.环境搭建 1.靶场描述 DC-8 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing. This challenge is a bit of a hybrid between being an actual challenge, and being a "proof of concept&quo…

【技术选型】Doris vs starRocks

比对结论 仅从当前能看到的数据中,相比于doris,starRocks在性能方面具备优势,且更新频率高(降低维护成本)。 目标诉求 并发性不能太低——相比于clickhouse不到100的QPS支持大表关联——降低数据清洗的压力&#xf…

家用洗地机哪个品牌质量比较好?高配置洗地机推荐

近年来,科技飞速发展,推动了多个新兴行业的崛起,其中洗地机行业也在不断扩大。然而,随着市场的蓬勃发展,洗地机市场的产品质量参差不齐。在众多品牌中,真正致力于深入研究和创新的品牌相对较少。洗地机的问…

电流检测方法

电路检测电路常用于:高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流检测等场景。 对于大部分应用,都是通过感测电阻两端的压降测量电流。 一般使用电流通过时的压降为数十mV~数百mV的电阻值&…

VUE element-ui实现表格动态展示、动态删减列、动态排序、动态搜索条件配置、表单组件化。

1、实现效果 1.1、文件目录 1.2、说明 1、本组件支持列表的表头自定义配置,checkbox实现 2、本组件支持列表列排序,vuedraggable是拖拽插件,上图中字段管理里的拖拽效果 ,需要的话请自行npm install 3、本组件支持查询条件动态…

将Android应用修改为鸿蒙应用的工作

将Android应用修改为鸿蒙(HarmonyOS)应用需要进行一系列主要的工作。以下是在进行这一转换过程中可能需要进行的主要工作,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.项目…

Microsoft Excel 直方图

Microsoft Excel 直方图 1. 数据示例2. 打开 EXCEL3. settings4. 单击直方图柱,右键“添加数据标签”References 1. 数据示例 2. 打开 EXCEL 数据 -> 数据分析 -> 直方图 3. settings 输入区域样本值、接受区域分类间距,输出选项选择“新工作表组…

手把手图解教你Java SPI源码分析

原创/朱季谦 我在《Java SPI机制总结系列之开发入门实例》一文当中,分享了Java SPI的玩法,但是这只是基于表面的应用。若要明白其中的原理实现,还需深入到底层源码,分析一番。 这里再重温一下SPI机制的概念:SPI&#…

JS实现网页轮播图

轮播图也称为焦点图,是网页中比较常见的网页特效。 1、页面基本结构: 大盒子focus,里面包含 左右按钮ul 包含很多个li (每个li里面包含了图片)下面有很多个小圆圈 因为我们想要点击按钮,轮播图左右播放&a…

外部晶振、复位按键、唤醒按键、扩展排针原理图详解

前言:本文对外部晶振、复位按键、唤醒按键、扩展排针原理图详解。本文使用的MCU是GD32F103C8T6 目录 外部晶振原理图 复位按键、唤醒按键原理图 扩展排针部分原理图 ​外部晶振原理图 如下图,两个外部晶振,分别是8M(主晶振&a…

【InternLM 大模型实战】第三课

基于 InternLM 和 LangChain 搭建你的知识库 大模型开发范式RAG(检索增强生成)FINETUNE(微调) LangChain 简介构建向量数据库加载源文件文档分块文档向量化 搭建知识库助手构建检索问答链RAG方案优化建议 Web Demo 部署动手实战In…

让网页自动化测试更简便,流程图设计工具为您解决痛点

在数字化时代,网页自动化测试已经成为提高工作效率、保证项目质量的重要手段。然而,传统的自动化测试往往需要复杂的编程技能,对非专业人员来说门槛较高。为了解决这个问题,我们向您推荐一款创新的设计工具,它可以通过…

使用numpy处理图片——二值图像

大纲 载入图像灰阶处理二值处理 在《使用numpy处理图片——灰阶影像》一文中,我们将彩色图片转换成灰阶图片。本文将在这个基础上将灰阶图片转换成二值图像。 二值图像就是只有黑白两种颜色的图像。像素最终显示黑还是白,需要有一个判断标准。如果图片太…

基于Token认证的登录功能实现

Session 认证和 Token 认证过滤器和拦截器 上篇文章我们讲到了过滤器和拦截器理论知识以及 SpringBoot 集成过滤器和拦截器,本篇文章我们使用过滤器和拦截器去实现基于 Token 认证的登录功能。 一、登录校验 Filter 实现 1.1、Filter 校验流程图 获得请求 url。判…

Gradle的安装及源替换步骤详解

工具介绍 Gradle是一款强大的构建工具,用于管理项目的依赖关系和构建过程。在使用Gradle之前,我们需要先进行安装,并可能需要更改默认的依赖源,以提高下载速度。下面是一步步的Gradle安装及源替换指南。 第一步&#xff1a…

Repo命令与git的关系

Repo命令与git的关系是很密切的。 我们都知道,git是一个开源的版本控制系统,常用在大型项目的管理上。 我们对repo的使用和了解就比较少了。Repo是一个基于Git构建出来的工具,它的出现不是为了取代Git,而是为了更方便开发者使用Gi…

使用PE信息查看工具和Beyond Compare文件比较工具排查dll库文件版本不对的问题

目录 1、问题说明 2、修改了代码,但安装版本还是有问题 3、使用PE信息查看工具查看音视频库文件(二进制)的时间戳 4、使用Beyond Compare比较两个库文件的差异 5、找到原因 6、最后 C软件异常排查从入门到精通系列教程(专栏…

Python 文本处理库之chardet使用详解

概要 当处理文本数据时,经常会遇到各种不同的字符编码。这可能导致乱码和其他问题,因此需要一种方法来准确识别文本的编码。Python中的chardet库就是为了解决这个问题而设计的,它可以自动检测文本数据的字符编码。本文将深入探讨chardet库的…

git 的安装

git 的安装 在我们开始使用 Git 前,需要将它安装在我们的电脑上。即便已经安装,最好将它升级到最新的版本。 我们可以通过软件包或者其它安装程序来安装,或者下载源码编译安装。 本文只介绍通过在 windows 上安装软件包的方式,其…

大模型实战05——LMDeploy大模型量化部署实践

大模型实战05——LMDeploy大模型量化部署实践 1、大模型部署背景 2、LMDeploy简介 3、动手实践环节——安装、部署、量化 注 笔记内容均为截图 笔记课程视频地址:https://www.bilibili.com/video/BV1iW4y1A77P/?spm_id_from333.788&vd_source2882acf8c823ce…