当前位置: 首页 > news >正文

认识适配器模式

适配器模式

一、定义

在不修改原来代码的情况下,适配器模式使接口不兼容的那些类可以一起工作。

二、适配器结构

1、Target(目标抽象类):目标抽象类定义客户所需的接口,可以是一个抽象类或者接口,也可以是具体类。在类适配器中,由于Java语言不支持多重继承,它只能是接口。
2、Adapter(适配器类):它可以调用另一个接口 ,作为一个转换器,对Adaptee和Target进行适配。适配器Adapter是适配器模式的核心,在类适配器中,它通过实现Target接口并继承Adaptee类来使二者产生联系,在对象适配器中,它通过继承Target并关联一个Adaptee对象来使二者产生联系。
3、Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体的类,包含了客户希望使用的业务方法,在某些情况下甚至没有适配者类的代码。

三、实现

mac电脑多屏显示需要外接显示屏,此时就需要一个转接头。

1、类适配器

// 定义一个屏幕显示画面
public class Screen {public void show(){System.out.println("屏幕显示画面");}
}
//定义一个显示器适配器(转接头)
public interface ScreenAdapter {void adaption();
}
//将显示器接到mac上,完成多屏显示
public class ToMacAdapter extends Screen implements ScreenAdapter{@Overridepublic void adaption() {System.out.println("接入转换器");super.show();}
}

2、对象适配器

但是我又想接多屏显示,又想听音乐的话,类适配器就不能支持了。这时我们可以用对象适配器。

//听音乐
public class Music {public void listen(){System.out.println("listen music");}
}public interface MixAdapter {//听音乐void listenMusic();//联网void screen();
}public class USBCAdapter implements MixAdapter{private Screen screen;private Music music;@Overridepublic void listenMusic() {music.listen();}@Overridepublic void screen() {screen.show();}
}

四、适配器模式的优缺点

优点:
1、能提高类的透明性和复用,现有的类复用但不需要改变。
2、目标类和适配器类解耦,提高程序的扩展性。
3、在很多业务场景中符合开闭原则。
缺点:
1、适配器编写过程需要全面考虑,可能会谧加系统的复杂性。
2、增加代码阅读难度,降低代码可读性,过多使用适配器会使系统代码变得凌乱。

相关文章:

认识适配器模式

适配器模式 一、定义 在不修改原来代码的情况下,适配器模式使接口不兼容的那些类可以一起工作。 二、适配器结构 1、Target(目标抽象类):目标抽象类定义客户所需的接口,可以是一个抽象类或者接口,也可以…...

JavaSe第6次笔记

1.不建议使用c语言的数组的表示方法。 2.二维数组表示方法 3.数组整体初始化时,只能在定义时初始化。 int[] array; array new int[]{1, 2}; 4. boolean类型数组,默认值是false,String类型数组,默认是null,其它是…...

单例设计模式

介绍 单例模式是一种创建型设计模式,其主要特点包括: 只有一个实例:单例模式确保系统中只有一个实例对象存在,所有对该对象的访问都是对同一个对象的引用全局访问:单例模式可以全局访问该实例对象,避免了多个对象之间的冲突和竞争延迟初始化:单例模式通常使用延迟初始化技术,…...

第七章 opengl之光照(基础光照)

OpenGL基础光照环境光照漫反射光照镜面光照基础光照 主要需要理解一个模型是冯氏光照模型,主要结构由3个分量组成:环境,漫反射,镜面光照。下面分别描述下这三个光照: 环境光照(Ambient Lighting):即使在黑…...

不考虑分配与合并情况下,GO实现GCMarkSweep(标记清除算法)

观前提醒 熟悉涉及到GC的最基本概念到底什么意思(《垃圾回收的算法与实现》)我用go实现(因为其他的都忘了,(╬◣д◢)ムキー!!) 源码地址(你的点赞,是我开源的…...

性能分析利器:火焰图

什么是火焰图 火焰图(FlameGraph)是是由 Linux 性能优化大师 Brendan Gregg 发明的。通过 perf 等工具分析得到结果,看起来就像是火焰,这也是它的名字的由来。火焰图以一个全局的视野来看待时间分布,它从底部往顶部&am…...

八股总结(三)操作系统内存管理、进程线程、进程同步与通信、中断与异常、常用命令

layout: post title: 八股总结(三)操作系统内存管理、进程线程、进程同步与通信、中断与异常、常用命令 description: 八股总结(三)操作系统内存管理、进程线程、进程同步与通信、中断与异常、常用命令 tag: 八股总结 文章目录操作…...

概率论小课堂:条件概率和贝叶斯公式(机器翻译的工作原理)

文章目录 引言I 条件概率1.1 条件概率的定义1.2 条件概率的计算II 贝叶斯公式2.1贝叶斯公式的本质2.2 机器翻译的原理引言 对于几乎所有的随机事件来讲,条件概率由于条件的存在,它通常不等于本身的概率。 贝叶斯公式的本质:在数学上条件和结果可以互换,通过这种互换,可以…...

流量与日志分析

文章目录1.流量与日志分析1.1系统日志分析1.1.1window系统日志与分析方法1.1.2linux 系统日志与分析方法1.2 web日志分析iis 日志分析方法apache日志分析**access_log****error_log**nginx日志分析tomcat 日志分析主流日志分析工具使用1.流量与日志分析 日志,是作为…...

英文论文写作常用例句整理汇总(持续更新)

ContentsGeneral introductionProblem definitionGaps in literatureProblems solutionStudy motivationAims & objectivesSignificance and advantages of your work参考资料General introduction Research on __ has a long tradition For decades, one of the most pop…...

[N0wayBack 练习题] My_enc,Euler,EasyLock,RRRRSA,EasyNumber,pwn

加入一个队,队里的练习题不少,还有WP真好My_enc原题from secret import flag import randomdef Cyber_key(LEN):Key [[] for i in range(row)]for x in range(row):for i in range(LEN):Key[x].append(random.randint(0, 2023))return Keydef Punk_enc(Key, msg):out []for l…...

网分线缆测试和dc-block

今天的好苹果和坏苹果 好苹果:是校准件和网分都是好的,又给了我一次复盘的机会 网分测试线缆: 1.网分直接复位,如果网分复位是校准状态,且解的是精密转接头,BNC的,可以不校准,结果差…...

Java创建线程的方式只有一种:Thread+Runnable

Java创建线程的方式其实只有一种👨‍🎓一、继承Thread👨‍🎓二、实现Runnable接口👨‍🎓三、实现Callable接口👨‍🎓四、通过线程池创建👨‍🎓五、总结一般我…...

数据加密--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)

实例6:数据加密 数据加密是保存数据的一种方法,它通过加密算法和密钥将数据从明文转换为密文。 假设当前开发的程序中需要对用户的密码进行加密处理,已知用户的密码均为6位数字,其加密规则如下: 获取每个数字的ASCI…...

【GO】K8s 管理系统项目33[前端部分–登录和登出]

K8s 管理系统项目[前端部分–登录和登出] 1. 登录登出流程 1.1 登录流程 登入流程总的分为5步: 账号密码验证token生成token验证验证成功进行跳转验证失败返回/login 1.2 登出流程 登出流程就相对简单,分为2步 删除Token跳转/login 2. 登录代码 src/views/login/Login.v…...

Vue 计算属性基础知识 监听属性watch

计算属性的概念 在{{}}模板中放入太多的逻辑会让模板内容过重且难以维护。例如以下代码&#xff1a; <div id"app">{{msg.split().reverse().join()}}</div><script>const vm new Vue({el: "#app",data: {msg:我想把vue学的细一点}})&…...

PAT:L1-004 计算摄氏温度、L1-005 考试座位号、L1-006 连续因子(C++)

目录 L1-004 计算摄氏温度 问题描述&#xff1a; 实现代码&#xff1a; L1-005 考试座位号 问题描述&#xff1a; 实现代码&#xff1a; 原理思路&#xff1a; L1-006 连续因子 问题描述&#xff1a; 实现代码&#xff1a; 原理思路&#xff1a; 过于简单的就不再写…...

Redis集群方案应该怎么做?

今天我们来跟大家唠一唠JAVA核心技术-RedisRedis是一款流行的内存数据库&#xff0c;适用于高性能的数据缓存和实时数据处理。当需要处理大量数据时&#xff0c;可以使用Redis集群来提高性能和可用性。Redis在单节点模式下&#xff0c;虽然可以支持高并发、快速读写、丰富的数据…...

连续点击返回键退出Android 应用

问题 业务需要&#xff0c;在主界面连续点击返回键退出应用&#xff0c;记录一下。 解决方案 先说结论&#xff0c;在主界面Activity中添加如下代码 /*** 记录上次点击返回键时间*/private long lastClickTime 0;/*** 两次回退点击时间间隔设置不小于2s*/public static fi…...

【PyTorch】教程:torch.nn.Hardswish

torch.nn.Hardswish 原型 CLASS torch.nn.Hardswish(inplaceFalse) 参数 inplace (bool) – 内部运算&#xff0c;默认为 False 定义 Hardswish(x){0if x≤−3,xif x≥3,x⋅(x3)/6otherwise\text{Hardswish}(x) \begin{cases} 0 & \text{if~} x \le -3, \\ x & \te…...

Phi-4-Reasoning-Vision从零开始:双卡4090环境nvidia-smi调优

Phi-4-Reasoning-Vision从零开始&#xff1a;双卡4090环境nvidia-smi调优 1. 项目概述 Phi-4-Reasoning-Vision是基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具&#xff0c;专为双卡4090环境优化。这个工具严格遵循官方SYSTEM PROMPT规范&#xff0c;…...

每日一道面试题 06|Spring Bean 的生命周期(高频必问)

面试题请完整说一下 Spring Bean 从加载到销毁的整个生命周期&#xff1f;有哪些关键扩展点&#xff1f;一、一句话概括生命周期Bean 从被 Spring 容器实例化 → 属性填充 → 初始化 → 正常使用 → 容器关闭时销毁的完整过程。二、标准生命周期流程&#xff08;按顺序背&#…...

中国空间智能,梦想照进现实

2026年初&#xff0c;AI教母李飞飞的AI公司World Labs再次获得一笔10亿美元的投资&#xff0c;投资名单除了传统投资机构外&#xff0c;还不乏英伟达、Autodesk等行业巨头&#xff0c;这清晰地传递出市场信号&#xff1a;继AI大语言模型之后&#xff0c;空间智能已成为AI的下一…...

告别Linux卡顿!用RK3562的M0核跑RT-Thread,实现实时控制与Linux并行运行

RK3562多核异构开发实战&#xff1a;用M0核实现Linux与RT-Thread的完美协同 在智能家居控制器项目中&#xff0c;我们遇到了一个典型难题——当Linux系统处理图形界面和网络通信时&#xff0c;电机的实时控制会出现明显延迟。传统解决方案需要两套独立硬件&#xff0c;直到我们…...

Claude Code 工程化实战:从工具使用者到 Agent 构建者的进阶之路

Claude Code 工程化实战&#xff1a;从工具使用者到 Agent 构建者的进阶之路 声明&#xff1a; &#x1f4dd; 作者&#xff1a;甜城瑞庄的核桃&#xff08;ZMJ&#xff09; 原创学习笔记&#xff0c;欢迎分享&#xff0c;但请保留作者信息及原文链接哦&#xff5e; 摘要&#…...

Awoo Installer:破解Switch玩家的终极全能游戏安装引擎

Awoo Installer&#xff1a;破解Switch玩家的终极全能游戏安装引擎 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 在Nintendo Switch破解生态中&a…...

Mac/Win/Linux全平台实测:用Ollama一键部署DeepSeek-R1 7B模型,附硬件配置建议

Mac/Win/Linux全平台实测&#xff1a;用Ollama一键部署DeepSeek-R1 7B模型&#xff0c;附硬件配置建议 去年在帮创业团队搭建本地AI开发环境时&#xff0c;我试遍了市面上所有开源模型部署方案。当Ollama首次支持DeepSeek-R1时&#xff0c;其跨平台兼容性让我眼前一亮——同一套…...

避坑指南:SpringBoot调用DeepSeek API时你可能会遇到的5个问题及解决方案

SpringBoot集成DeepSeek API的5个典型避坑指南 在将DeepSeek的对话补全能力整合到SpringBoot应用时&#xff0c;不少开发者会遇到一些看似简单却容易踩坑的问题。这些问题往往不会在官方文档中被特别强调&#xff0c;但却能让你在调试过程中耗费数小时。本文将聚焦五个最具代表…...

告别裸机!用状态机思路重构你的51单片机温度监测程序(以DS18B20为例)

告别裸机&#xff01;用状态机思路重构你的51单片机温度监测程序&#xff08;以DS18B20为例&#xff09; 在嵌入式开发中&#xff0c;51单片机因其简单易用、成本低廉而广受欢迎。但当项目复杂度上升时&#xff0c;传统的"while循环延时"式代码往往会陷入维护噩梦——…...

手把手教你读懂SAP SD定价中的红绿灯图标(KINAK字段全解析)

SAP SD定价红绿灯图标全解析&#xff1a;从业务逻辑到实战诊断 在SAP SD模块的日常操作中&#xff0c;定价条件的有效性判断直接影响着销售订单的准确性和业务决策效率。那些看似简单的红绿灯图标背后&#xff0c;隐藏着复杂的业务规则和系统逻辑。本文将带您深入理解KINAK字段…...