适配器与装饰器模式

适配器模式与装饰器模式的区别 适配器模式 对适配器模式的功能很好理解,就是把一个类的接口变换成客户端所能接受的另一种接口,从而使两个接口不匹配而无法在一起工作的两个类能够在一起工作。 适配器模式的结构: target(目标接口):所要转换的所期待的接口 Adaptee(源角色):需要适配的类 Adapter(适配器):将源角色适配成目标接口,一般持有源接口的引用(或者继承源接口),且实现目标接口。 Java I... 阅读详情

适配器模式

适配器模式,就是把一个类的接口变换成客户端所能接受的另一个接口,从而使两个接口不匹配的两个类能够在一起工作。
通常用于一个项目需要引用一些开源框架来一起工作的情况下,这些开源框架都有一些关于环境信息的接口,需要从外部传入,但外部接口不一定能匹配,在这种请款下,就需要适配器模式来转换接口。

适配器模式的结构

适配器模式的类结构如图所示:

这里写图片描述

各角色说明如下:

  • Target(目标接口):所需要转换的所期待的接口
  • Adaptee(源角色):需要适配的接口
  • Adapter(适配器):将原接口适配成目标接口,继承原接口,实现目标接口

I/O中的适配器模式

适配器的作用就是将一个接口适配到另一个接口,在I/O类库有很多这样的类子,如将字符串数据转成字节数据保存到文件中,将字节数据转换成流数据等。下面以InputStreamReader和OutputStreamWriter 类为例来介绍适配器模式。
InputStreamReader和OutputStreamWriter分别继承了Reader和Writer接口,但要创建它们的对象必须在构造函数传入InputStream和OutputStream实例。InputStreamReader和OutputStreamWriter的作用也是将InputStream和OutputStream适配到Reader和Writer,InputStreamReader的类结构如图

这里写图片描述

InputStreamReader实现了Reader接口,并持有了InputStream的引用,这里是通过StreamDecoder类间接持有的,因为从byte到char要经过解码。
很明显适配器就是InputStreamReader类,源角色就是InputStream代表的实例对象,目标接口就是Reader类了。
I/O类库中还有很多类似的用法,如StringReader将String类适配到Reader接口,ByteArrayInputStream适配器将byte数组适配到InputStream流处理接口。

装饰器模式

装饰器模式,顾名思义,就是将某个类重新装扮下,使它在功能上更强大,但是作为原来的这个类,使用者不应该感受到装饰前与装饰后有什么不同,否则就破坏了原有类的结构,所以装饰器模式要做到对装饰类的使用者透明。

装饰器模式的结构

这里写图片描述

图中各角色描述如下:

  • Component:抽象组建角色,定义一组抽象的接口,规定这个被装饰组件都有哪些功能。
  • ConcreteComponent:实现这个抽象组件的所有功能;
  • Decorator:装饰器角色,它持有一个Component对象实例的引用,定义一个与抽象组件一致的接口;
  • ConcreteDecorator:具体的装饰器实践者,负责实现装饰器角色定义的功能。

I/O中的装饰器模式

以FileInputStream为例介绍装饰器模式的使用。

这里写图片描述

如图所示FileInputStream的类结构图,InputStream类是以抽象组件存在的,而FileInputStream是具体组件,它实现了抽象组件的所有接口,FileInputStream无疑就是装饰角色,它实现了InputStream类的所有接口,并持有InputStream的对象的实例引用;BufferedInputStream是具体的装饰器实现者,它给InputStream附加了功能,这个装饰器类的作用使得InputStream读取的数据保存在内存中,从而提高读取的性能。与这个装饰器类类似的功能还有LineNumberInputStream类,它的作用是提高按行读取数据的功能,它们都让InputStream增强了功能或提升了性能。

适配器模式与装饰器模式的区别

装饰器与适配器模式都有一个别名叫包装模式(Wrapper),它们的作用看似都是起到包装一个类或对象的作用,但是使用它们的目的不一样。适配器模式的意义是将一个接口转变成另一个接口,通过改变接口达到重复使用的目的;而装饰器模式不是要改变被装饰对象的接口,而恰恰要保持原有的接口,但增强原有对象的功能,或者改变原有对象的处理方法而提高性能。所有这两个模式的设计目的是不同的。

TwinCAT3 Modbus-TCP Client/Server使用 /起始地址是12289//起始地址是12294。 阅读详情

相关推荐

如何用python开发“跳一跳”游戏【附源码】

jump_start_time = pygame.time.get_ticks() # 记录跳跃开始时间。jump_duration = current_time - jump_start_time # 计算跳跃持续时间。current_time = pygame.time.get_ticks() # 获取当前时间。jump_velocity = -15 # 设置跳跃的初始速度。# 如果小球跳跃结束,重置跳跃状态。# 根据跳跃持续时间计算跳跃高度。# 移除超出屏幕的障碍物。

helloshili2011的博客 2495

适配器模式和装饰器模式区别

适配器模式和装饰器模式都可以在原类文件方法的基础上修改、增强,但侧重点不一样

can_meng_yun的博客 2915

【ESP32】1.编译、烧录、创建工程

本文介绍了在VSCode中搭建ESP32开发环境并烧录"Hello World"工程的过程。首先通过串口工具成功下载固件后,解决了OpenOCD报错问题。针对头文件无法识别的问题,修改了c_cpp_properties.json配置文件,调整了编译器路径和IntelliSense模式。文章还详细说明了创建新工程的步骤,包括选择芯片型号和项目模板,并验证了串口打印功能。最后提醒在项目构建时要等待完成,避免文件缺失。整个流程涵盖了环境搭建、代码烧录、调试及新项目创建等关键环节。

梁山1号 1484

设计模式-简单例子理解适配器模式、装饰器模式

通过通俗易懂的Demo理解适配器模式、装饰器模式,同时了解他们的区别

蒋大钊的博客 1345

VisionPro开发实战:CogRecordDisplay控件显示与保存图片的完整流程(附C#代码示例)

本文详细解析了VisionPro开发中CogRecordDisplay控件的图像处理全流程,包括图像加载、显示优化、动态清屏及结果保存等关键操作。通过C#代码示例,展示了如何高效使用该控件进行工业视觉应用开发,特别适合自动化检测系统的开发者参考。

weixin_42523792的博客 274

DIY音乐播放器:用VS1053模块+Arduino打造你的专属MP3播放器(附完整代码)

本文详细介绍了如何使用VS1053音频解码模块与Arduino开发板,从零开始构建一个功能完备的桌面级MP3播放器。内容涵盖硬件架构设计、SPI总线共享、底层驱动编写、双缓冲区数据流管理以及用户交互实现,并提供完整的代码示例与性能优化建议,帮助创客打造高度可定制的专属音乐播放设备。

weixin_29189003的博客 286

装饰器模式和适配器模式

装饰器模式 装饰器模式(Decorator )允许向一个现有的对象添加新的增强功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 一般的,我们为了扩展一个类经常使用继承方式实现,但随着扩展功能的增多,子类会很膨胀。在不想增加很多子类的情况下扩展类。这个时候就可以通过装饰器模式动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。但缺点就是多层装饰比较复杂。 那它是怎么实现的呢? 通过先将具体功能职责划分好,对于每部分功能职责,都有一个实现了

m0_45861545的博客 2402

保姆级教程:在DolphinScheduler 3.x中配置Apache SeaTunnel任务(Flink/Spark双引擎)

本文提供了一份详细的教程,指导如何在DolphinScheduler 3.x中配置Apache SeaTunnel任务,支持Flink和Spark双引擎。从环境准备、脚本选择到配置文件编写和任务调度优化,涵盖了所有关键步骤和常见问题解决方案,帮助用户高效集成SeaTunnel到海豚调度系统中。

weixin_42524945的博客 194

《Java设计模式》

设计模式

m0_47743353的博客 676

【大模型应用开发-大模型知识】(二)大模型分类和常见大模型

目前包含 Claude 和 Claude-Instant 两种模型可供选择,其中 Claude Instant 的延迟更低,性能略差,价格比完全体的 Claude-v1 要便宜,两个模型的上下文窗口都是 9000 个token(约 5000 个单词,或 15 页)它的目标是“更安全”、“危害更小”的人工智能。Google 还开发了多种 PaLM 的改进版本。更强大的基础模型: ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。

1万+

Token 费用爆炸?教你用 Semantic Cache(语义缓存)把 API 成本降低 80%

本文介绍了语义缓存(Semantic Cache)技术在大模型应用中的关键作用。传统Redis缓存基于精确匹配,无法处理用户提问的语义相似性,导致重复调用昂贵的LLM API。语义缓存通过将问题向量化并在向量空间中进行相似度匹配,可识别30%-50%的重复提问,直接返回历史答案。文章详细解析了技术原理(Embedding+向量搜索)、架构设计,并提供了基于Python和ChromaDB的50行核心实现代码。同时指出了生产环境中的三大挑战:阈值设定、隐私保护和多轮对话处理,并给出相应解决方案。该技术能以极低成

BUG猿的博客 1055

【设计模式】结构型模式(一):适配器模式、装饰器模式

适配器模式(Adapter Pattern)是一种结构型设计模式,其主要目的是通过适配器将一个接口转换为客户端所期望的另一个接口。这个模式允许你为现有类增加新功能,或者让它们之间兼容,而无需修改其源代码。

Data · Model · Agent · Repeat 1465

MCAL中Dsadc的配置

DSADC模块作为一个专用的模块,主要应用在编码器软解码,功能强大而复杂,这里介绍了Dsadc的mcal配置和详细描述,让你全面学习和理解这个模块功能和应用。

dhyw12399999的博客 787

设计模式 | 九、装饰器模式(与继承的区别,与适配器/代理的区别)[DecoratorPattern]

设计模式-装饰器模式:指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。

GiraffePeng的博客 4954

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

php中适配器模式与装饰器模式的区别

参考:https://www.phpmianshi.com/?id=63 概念 适配器与装饰器模式的别名都是包装模式(Wrapper)。 区别 适配器模式的意义 将一个接口转变成另一个接口,目的是通过改变接口来达到重复使用的目的。 装饰器模式的意义 不改变被装饰对象的接口,而是保持原有的接口,增强原有对象的功能,或改变原有对象的处理方式而增提高性能。 ...

tiancityycf的专栏 299

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

适配器模式与装饰器模式在日志框架中的实战运用

适配器模式解决了日志框架切换的接口兼容问题,装饰器模式解决了日志功能动态组合的扩展问题。两者结合,使得业务代码只依赖统一的 ILogger 接口,底层框架切换只需修改适配器实现,功能扩展只需增加装饰器。落地时需关注装饰器链的顺序、间接调用的性能影响、以及装饰器链的可调试性。

alex_goden的博客 1671

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java面试题:解释装饰器模式及其与适配器模式的区别

装饰器模式(Decorator Pattern)和适配器模式(Adapter Pattern)都是结构型设计模式,它们都涉及到对象的组合,但它们的应用场景和目的有所不同。

码农超哥的博客 629

架构学习之路(一)源码分析 8 适配器模式与装饰器模式

架构学习之路(一)源码分析 7 委派模式 适配器模式(Adapter) 结构型 Spring AOP 模块对 BeforeAdvice、AfterAdvice、ThrowsAdvice 三种给你通知类型的支持就是借助适配器的模式来实现的,这样的好处是使框架允许用户向框架中加入自己想要支持的任何一种通知类型,这三种通知类型都是 Spring AOP 模块定义的,是 AOP 联盟定义的 Advice 的子类型 注重兼容、转换 适配者与被适配者之间没有层级关系,也没有必然联系 满足 has-a 关系 生.

yang930207的博客 506

学习记录427@Java IO流中的设计模式之适配器模式与装饰器模式

今天在看IO相关的知识时看到 IO流中的设计模式之适配器模式与装饰器模式,恍然大悟,因此在这里记录一下。

教练我想学编程 120

Java面试必看!如何区分适配器与装饰器模式?

这篇文章将深入探讨适配器模式与装饰器模式的核心区别。通过分析两者的定义、应用场景及实现方式,帮助你清晰理解它们的功能差异。适配器模式主要用于解决接口不兼容问题,而装饰器模式则专注于动态为对象添加职责。掌握这两种设计模式的区别与使用场景,将有助于你在Java面试中游刃有余地应对相关问题。

yanpeng2580的博客 204

【23种设计模式之】7.装饰器模式——概述,及与对象适配器的区别

简单来说,就是创建一个新的类,通过组合的方式,在不修改原有类的基础上,增加新的功能。与此同时,对于使用者来说,使用方法没有发生改变。 组合:就是在一个类的内部,以成员变量持有另一个类的对象。 从结构上,相当于适配器模式中的对象适配器。 对象适配器和装饰器的本质区别在于,对象适配器用组合的方式适配一个与接口无关的类,而装饰器用组合的方式装饰一个实现接口的类。 ...

学习中 249

Python 设计模式实战:观察者、状态、适配器与装饰器模式详解

本教程深入探讨四种核心设计模式在Python中的实战应用:观察者模式实现松耦合事件系统、状态模式管理复杂对象行为、适配器模式解决接口兼容问题、装饰器模式动态扩展对象功能。通过GUI框架、电商订单系统、API集成等真实案例,展示如何应用设计模式构建灵活可维护的软件系统。

YAnt的博客 1014

Java IO框架与适配器模式、装饰器模式

IO框架: 适配器模式: 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。 装饰器模式: 装饰器模式(D...

文武傲群雄,彳亍定江山 375

java 适配器和装饰器,适配器与装饰器模式 - devotion的个人页面 - OSCHINA - 中文开源技术交流社区...

适配器模式适配器模式,就是把一个类的接口变换成客户端所能接受的另一个接口,从而使两个接口不匹配的两个类能够在一起工作。 通常用于一个项目需要引用一些开源框架来一起工作的情况下,这些开源框架都有一些关于环境信息的接口,需要从外部传入,但外部接口不一定能匹配,在这种请款下,就需要适配器模式来转换接口。适配器模式的结构适配器模式的类结构如图所示: 各角色说明如下:Target(目标接口):所需要转换的所...

weixin_42298209的博客 282
上一篇: NIO工作方式
下一篇: 逻辑回归(Logistic Regression)
wugy111
博客等级 码龄14年 8粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值