初识适配器模式

适配器模式


引入

生活中的例子:当我们使用手机充电时,充电器起到了转换器的作用,它将家用的220伏特电压转换成适合手机充电的5伏特电压。

适配器模式的三种类型

命名原则:适配器的命名应基于资源如何传递给适配器来进行。

  1. 类适配器模式:这种方式直接通过类实现。在适配器(Adapter)中,源(src)被当做一个类直接继承。
  2. 对象适配器模式:这种方式通过持有对象来实现。在适配器(Adapter)中,源(src)作为一个对象被持有。
  3. 接口适配器模式:这种方式通过实现接口来应用。在适配器(Adapter)中,源(src)作为一个接口被实现。
具体代码示例
类适配器模式类图

image-20241014231958151

类适配器模式

package com.lucifer.A07_Adapter.classAdapter;
//适配器
public class voltageAdapter extends voltage220v implements Ivoltage5v{public int output5v() {int src = output220v();int dst = src/44;return dst;}
}

缺点:使用了继承,且适配器中有src,增加使用成本

对象适配器模式


package com.lucifer.A07_Adapter.objectAdapter;
//适配器
public class voltageAdapter implements Ivoltage5v {private voltage220v voltage220v;//通过构造器传入--聚合关系public voltageAdapter(com.lucifer.A07_Adapter.objectAdapter.voltage220v voltage220v) {this.voltage220v = voltage220v;}public int output5v() {int dst = 0;if(null!=voltage220v){int src = voltage220v.output220v();System.out.println("使用对象适配器进行转化");dst = src/44;System.out.println("适配完成");return dst;}else {return 0;}}
}

采用了合成复用原则(泛化->聚合)

接口适配器模式

package com.lucifer.A07_Adapter.interfaceAdapter;public class client_m1 {public static void main(String[] args) {absAdatpter absAdatpter = new absAdatpter(){//只需要关系需要使用的方法public void m1(){System.out.println("使用了m1的方法");}};absAdatpter.m1();}
}
在源码里面的使用
  1. SpringMvc 中的 HandlerAdapter, 就使用了适配器模式

  2. 使用 HandlerAdapter 的原因分析:

可以看到处理器的类型不同,有多重实现方式,那么调用方式就不是确定的,如果需要直接调用 Controller 方
法,需要调用的时候就得不断是使用 if else 来进行判断是哪一种子类然后执行。那么如果后面要扩展 Controller,
就得修改原来的代码,这样违背了 OCP 原则。

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

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

相关文章

Web架构演变历程~

1、背景 对于服务架构,这个名词大家应该都很熟悉了吧,一个好的架构并不是一个最合适的架构,在对于选择那种架构,对于一个项目后续发展致关重要,接下来我们一起走进web服务架构的演变历程看看吧! 2、服务架…

基于STM32F407VGT6芯片----跑马灯实验

一、在STM32F407VGT6芯片中配置GPIO环境 对于一个跑马灯实验,首先,要了解的就是,芯片是如何构造出来的,设计GPIO引脚:根据原理图, PC4,PC5,PC6,PC7 为 LED 输出控制管脚,PE0 为蜂鸣…

Spring Boot视频网站:安全与可扩展性设计

4 系统设计 4.1系统概要设计 视频网站系统并没有使用C/S结构,而是基于网络浏览器的方式去访问服务器,进而获取需要的数据信息,这种依靠浏览器进行数据访问的模式就是现在用得比较广泛的适用于广域网并且没有网速限制要求的B/S结构&#xff0c…

SpringDataRedis快速入门

SpringDataRedis 什么是SpringDataRedis SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis SpringDataRedis中提供了RedsiTemplate工具类,其中封装了各种对Redis的操作。并且将不同数据类型的操作API封装到了不同的类…

Atlas800昇腾服务器(型号:3000)—YOLO全系列NPU推理【检测】(五)

服务器配置如下: CPU/NPU:鲲鹏 CPU(ARM64)A300I pro推理卡 系统:Kylin V10 SP1【下载链接】【安装链接】 驱动与固件版本版本: Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run【下载链接】 Ascend-…

YOLOv11模型改进-注意力机制-引入自适应稀疏自注意力ASSA

随着目标检测领域的快速发展,YOLO系列模型凭借其端到端、高效的检测性能逐渐成为工业界和学术界的标杆。然而,如何进一步优化YOLOv11的特征提取能力,减少冗余信息并提升模型对复杂场景的适应性,仍是一个值得深入探讨的问题。为此&…

Atlas800昇腾服务器(型号:3000)—驱动与固件安装(一)

服务器配置如下: CPU/NPU:鲲鹏 CPU(ARM64)A300I pro推理卡 系统:Kylin V10 SP1【下载链接】【安装链接】 驱动与固件版本版本: Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run【下载链接】 Ascend-…

scrapy 爬虫学习之【中医药材】爬虫

本项目纯学习使用。 1 scrapy 代码 爬取逻辑非常简单,根据url来处理翻页,然后获取到详情页面的链接,再去爬取详情页面的内容即可,最终数据落地到excel中。 经测试,总计获取 11299条中医药材数据。 import pandas as…

特斯拉Robotaxi发布会2024:自动驾驶未来的开端

引言 2024年10月,特斯拉在洛杉矶举行了一场引发全球科技界高度关注的发布会,主题为“We Robot”。这场发布会展示了特斯拉的最新自动驾驶技术,包括无人驾驶出租车Cybercab和无人驾驶厢式货车Robovan,并且还展示了人形机器人Optim…

Java项目-基于springboot框架的社区疫情防控平台系统项目实战(附源码+文档)

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

精选的四款强大视频压缩工具的整理:

大家好!今天我来跟大家分享一下我使用过的几款视频压缩软件的体验感受,以及它们各自的好用之处;在这个信息爆炸的时代,视频文件越来越大,如何快速有效地压缩视频,同时还能保持较好的画质,是很多…

大模型~合集14

我自己的原文哦~ https://blog.51cto.com/whaosoft/12286799 # Attention as an RNN Bengio等人新作:注意力可被视为RNN,新模型媲美Transformer,但超级省内 , 既能像 Transformer 一样并行训练,推理时内存需求又不随 token 数线性…

基于DNA算法的遥感图像加解密matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 通过DNA算法对遥感图像进行加密和解密,分析加解密处理后图像的直方图,相关性,熵,解密后图像质量等。 2.测试软件版…

MongoDB安装配置及配置和启动服务

MongoDB 安装配置 附:MongoDB官网下载地址: https://www.mongodb.com/download-center/community 注: 官网可以下载最新版的MongoDB安装包,有MSI安装版和ZIP安装版。我们课堂上使用4.4.4的ZIP安装版。安装版参考博客&#xff1…

jmeter中对于有中文内容的csv文件怎么保存

jmeter的功能很强大,但是细节处没把握好就得不到预期的结果。今天来讲讲有中文内容的csv文件的参数化使用中需要注意的事项。 对于有中文内容,涉及到编码格式,为了让jmeter能正确地读取csv文件中的中文,需要把文件转码为UTF-8BOM…

【服务器部署】Docker部署小程序

一、下载Docker 安装之前,一定查看是否安装docker,如果有,卸载老版本 我是虚拟机装的Centos7,linux 3.10 内核,docker官方说至少3.8以上,建议3.10以上(ubuntu下要linux内核3.8以上&#xff0c…

(JAVA)贪心算法、加权有向图与求得最短路径的基本论述与实现

1. 贪心算法 1.1 贪心算法的概述: 贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。 贪心算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,省去了为找最优…

LeetCode-3192 使二进制数组全部等于1的最少操作次数Ⅱ

今天的每日一题就是昨天的延伸,预判成功。 LeetCode-3191 使二进制数组全部等于1的最少操作次数-CSDN博客文章浏览阅读115次。如果数组第一个元素就是0,那么第一个元素是肯定要翻转的,而我们只有从索引0的位置开始翻转才可以翻转到第一个元素…

生成模型初认识

生成模型初认识 参考学习资料:李宏毅-机器学习 以下为课程过程中的简易笔记 生成模型 为什么要用生成模型?——创造力:同一个输入,产生不同的输出(distribution),有一定概率发生某种随机事件…

【天池比赛】【零基础入门金融风控 Task2赛题理解】【2.3.6】

【天池比赛】【零基础入门金融风控 Task2赛题理解】【2.3.1-2.3.5】 2.3.6 变量分布可视化 2.3.6.1 单一变量分布可视化 对于 pandas.core.series.Series 类型的变量: index:含义:它表示 Series 对象的索引,也就是每个数据点对…