JAVA设计模式系列之Adapter(适配器)

23种设计模式-适配器(Adapter)设计模式 软考中级-软件设计师 适配器模式 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 适配器模式定义: 将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份. 为何使用? 我们经常碰到要将两个没有关系的类组合在一起使用,第一解决方案是:修改各自类的接口,但是如果我们没有源代码,或者,我们不愿意为了一个应用而修改各自的接口。 怎么办? 使用Adapter,在这两种接口之间创建一个混合接口(混血儿). 如何使用? 实现Adapter方式,其实"think in Java"的"类再生"一节中已经提到,有两种方式:组合(composition)和继承(inheritance). 假设我们要打桩,有两种类:方形桩 圆形桩. public class SquarePeg{   public void insert(String str){     System.out.println("SquarePeg insert():" str);   } } public class RoundPeg{   public void insertIntohole(String msg){     System.out.println("RoundPeg insertIntoHole():" msg); } } 现在有一个应用,需要既打方形桩,又打圆形桩.那么我们需要将这两个没有关系的类综合应用.假设RoundPeg我们没有源代码,或源代码我们不想修改,那么我们使用Adapter来实现这个应用: public class PegAdapter extends SquarePeg{   private RoundPeg roundPeg;   public PegAdapter(RoundPeg peg)(this.roundPeg=peg;)   public void insert(String str){ roundPeg.insertIntoHole(str);} } 在上面代码中,RoundPeg属于Adaptee,是被适配者.PegAdapter是Adapter,将Adaptee(被适配者RoundPeg)和Target(目标SquarePeg)进行适配.实际上这是将组合方法(composition)和继承(inheritance)方法综合运用. PegAdapter首先继承SquarePeg,然后使用new的组合生成对象方式,生成RoundPeg的对象roundPeg,再重载父类insert()方法。从这里,你也了解使用new生成对象和使用extends继承生成对象的不同,前者无需对原来的类修改,甚至无需要知道其内部结构和源代码. 如果你有些Java使用的经验,已经发现,这种模式经常使用。 进一步使用 上面的PegAdapter是继承了SquarePeg,如果我们需要两边继承,即继承SquarePeg 又继承RoundPeg,因为Java中不允许多继承,但是我们可以实现(implements)两个接口(interface) public interface IRoundPeg{   public void insertIntoHole(String msg); } public interface ISquarePeg{   public void insert(String str); } 下面是新的RoundPeg 和SquarePeg, 除了实现接口这一区别,和上面的没什么区别。 public class SquarePeg implements ISquarePeg{   public void insert(String str){     System.out.println("SquarePeg insert():" str);   } } public class RoundPeg implements IRoundPeg{   public void insertIntohole(String msg){     System.out.println("RoundPeg insertIntoHole():" msg);   } } 下面是新的PegAdapter,叫做two-way adapter: public class PegAdapter implements IRoundPeg,ISquarePeg{   private RoundPeg roundPeg;   private SquarePeg squarePeg;   // 构造方法   public PegAdapter(RoundPeg peg){this.roundPeg=peg;}   // 构造方法   public PegAdapter(SquarePeg peg)(this.squarePeg=peg;)   public void insert(String str){ roundPeg.insertIntoHole(str);} } 还有一种叫Pluggable Adapters,可以动态的获取几个adapters中一个。使用Reflection技术,可以动态的发现类中的Public方法。
【愚公系列】二十三种设计模式(六)-适配器模式(Adapter Pattern) 设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。 阅读详情

相关推荐

AI 体验走查 - 火山引擎存储的 AI UX 探索之路

火山引擎存储技术团队驱动 AI 自主完成用户体验走查 / 可用性测试的执行与评价,帮助业务改善交互体验。 立项“故事走查”的背景诉求和 AI 机遇 如何搭建“AI 评价”能力,精准识别交互问题 让交互体验故事走查变为技术产品,讲解系统设计,包括流程、User Story 维护、框架和 AI 模型选型、Midscene.js 的集成技巧等

bytedanceospo的博客 2841

【JAVA进阶系列】JAVA 设计模式 -- 适配器模式(Adapter)

【JAVA进阶系列】JAVA 设计模式 -- 适配器模式(Adapter) 【1.1】适配器模式简介 适配器模式的类结构图(使用继承) 适配器模式的类结构图(使用委托) Target(对象)角色,该角色定义所需的方法;Client(请求者)角色,该角色负责使用Target角色所定义的方法进行具体处理;Adaptee(被适配)角色,是一个持有既定方法的角色;Adapter(适配)角色,使用Adaptee角色的方法已满足Target角色的需求; 【1.2】适配器模式的 JAVA 代码实现 适

CopperSun 技术博客 364

【吐血整理-历时两个月,长达万字】FDTD Solutions学习笔记

原教学视频来自于Ansys-Lumerical官方的FDTD100,所看视频来自B站大佬UP主 【Nestor_呐等】 的幸苦翻译,本文内容粘贴自我个人在学习FDTD100时,通过字幕和一些个人理解总结的一份word。整理不易,强烈建议收藏!...

weixin_45719141的博客 10万+

JAVA设计模式系列之Adapter(适配器)-Java基础-Java-编程开发

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/javascript"

java专栏 215

手把手教你用高频注入法辨识永磁同步电机电感参数(附MATLAB仿真)

本文详细介绍了高频注入法在永磁同步电机电感参数辨识中的工程实践与MATLAB仿真指南。通过高频信号注入法,无需拆解电机即可在线精确测量Ld和Lq参数,适用于电动汽车驱动和工业伺服等高精度控制场景。文章包含信号设计、硬件实现、解调算法及完整MATLAB仿真模型构建,帮助工程师快速掌握这一关键技术。

orange的博客 292

【回眸】Tessy集成测试软件使用指南(一)新手使用篇

这个专栏的文章前4篇都在记录如何使用Tessy进行单元测试,集成测试需要有一定单元测试基础,且做集成测试之前,需要做好单元测试,否则将会大幅增加软件单元代码纠错的代价。集成测试所花费的时间通常远远超过单元测试。如果直接从单元测试到系统测试,结果往往是不理想的。集成测试可以检测由于单元相互交互而导致的错误,通常由一组专业的测试人员执行。

啤酒鸭的物联网开发记录博客 5291

JAVA中的设计模式研究系列(二)--Adapter(适配器)模式

适配器模式属于接口模式,在JAVA中起始是比较多见的。 在有些项目中,客户可能已经将一些基础的功能接口给我们了,而我们又不能修改它的源代码,只能利用他的接口。那么我们怎么样将客户的功能接口和我们拥有的代码结合起来,以适应于当前项目呢?我们可以这样做:使用Adapter,在这两种接口之间创建一个子接口,既继承了两个父类(或称为父母)的特性和功能,又是他可以很好地使用本项目的需求,这样不是很好吗! ...

千祥的春天 163

解决:请求的资源[/xxx/]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。

解决:请求的资源[/xxx/]不可用 描述 源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。

念兮为美 1万+

23种设计模式之适配器模式(Adapter Pattern)

、本篇文章将23种设计模式中的适配器模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。

小威的博客 2万+

DirectX function “GetDeviceRemovedReason“ failed with DXGI_ERROR_DEVICE_HUNG (“The GPU will not resp

游戏报错"DXGI_ERROR_DEVICE_HUNG"的解决方案 在使用RTX 40系显卡运行FIFA 23等游戏时,可能出现DirectX报错导致游戏崩溃。这主要由于最新显卡驱动与DirectX 12的兼容性问题。解决方法包括: 降级显卡驱动版本 修改游戏配置文件,将DIRECTX_SELECT设为1 在显卡控制面板中关闭垂直同步、抗锯齿、DLSS 3等功能 调整电源模式为性能优先 这些操作可以有效解决因驱动兼容性导致的游戏崩溃问题。

猿小白的博客 3895

【参数配置】OpenClaw 的破解之道(Doom Loop)

本文深入解析了OpenClaw中的Doom Loop(死循环)问题及其应对策略。主要内容包括: Agent Loop的核心概念:基于ReAct范式,OpenClaw通过"思考-行动-观察"循环执行任务,但可能陷入无进展的死循环。 Doom Loop现象:Agent持续执行但任务进度为零,常见于四种工具调用场景:相同调用重复执行、调用不存在工具、轮询工具卡死、操作交替振荡。 OpenClaw的防御机制: 第一道防线:重试端断路器,通过上下文压缩熔断(最多3次)和总重试次数熔断(32-160次)防止无限重试。

海兰 4042

Java设计模式 八 适配器模式 (Adapter Pattern)

适配器模式是一种解决。

空 1092

SAP-ABAP:SAP IDOC 全面学习指南

SAP-ABAP:SAP IDOC 全面学习指南

baidu_35680696的博客 1617

设计模式-适配器模式(Adapter Pattern)

适配器模式 定义 将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作。 分类 类适配器、对象适配器。 角色 目标接口:Target,该角色把其他类转换为我们期望的接口。 被适配者: Adaptee ,原有的接口,也是希望被适配的接口。 适配器: Adapter, 将被适配者和目标接口组合到一起的类。 适用场景 想要使用一个已经存在的类,但是它却不符合现有的接口规范,导致无法直...

kaven 4896

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

设计模式之适配器模式

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能以上三种形式是根据src是以怎样的形式给到Adapter类适配器:以类给到,在Adapter里,就是将src当做类,继承对象适配器:以对象给到,在Adapter里,将src作为一个对象,持有接口适配器:以接口给到,在Adapter里,将src作为一个接口,实现Adapter。

sxlishaobin的博客 1727

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

设计模式教程:适配器模式(Adapter Pattern)

将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类能够一起工作。

遇见伯灵说的博客 1816

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java适配器模式(adapter)

  本文介绍下java设计模式中的适配器模式 适配器模式 什么是适配器模式   将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 模式中的角色 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象 的类,也可以是接口。 需要适配的类(Adaptee):需要适配的类或适配者类。 适配器(Adapter):通过包...

波波烤鸭的博客 5632

设计模式之适配器模式(Adapter)

适配器模式(adapter pattern )的原始定义是:将类的接口转换为客户期望的另一个接口,2)适配者(Adaptee)类:适配者即被适配的角色,它是被访问和适配的现存组件库。是透明的,而且提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用。代理模式在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问,装饰者模式在不改变原始类接口的情况下,对原始类功能进行增强,并且支持多个装饰器的。类适配器类一般是继承 “适配者类(适配者的具体实现)” 并实现目标接口,而对象适配器。

liang8999的博客 2373

设计模式10——Adapter设计模式

Adapter适配器模式是将两个不兼容的类组合在一起使用。生活中笔记本电脑和手机等数码产品的充电器就是一个适配器,将家用220V的交流电转换为笔记本或手机正常工作所需的目标电压和电流。适配器起到一种转换和包装的作用。 Adapter设计模式主要目的组合两个不相干类,常用有两种方法:第一种解决方案是修改各自类的接口。但是如果没有源码,或者不愿意为了一个应用而修改各自的接口,则需要使用Adapter

Tony Chen的专栏 1万+

适配器设计模式(Adapter)

1.概述 适配器(Adapter)设计模式用于解决现有的程序无法直接使用,需要做适当的变换才能使用的情况,这种用于填补“现有程序”和“所需程序”之间的差异就是适配器。 例:你的电脑充电器就是一个适配器,你的电脑需要几十伏直流的电,而我们家庭常用是220V的交流电,这就需要你的电脑充电器充当适配器,电脑充电器用于填补“220V的交流电”和“电脑所需几十伏直流的电”之间的差异。 适配器设计模式...

学习笔记 637

设计模式之适配器模式(Adapter)【Java实现】

适配器模式(Adapter Pattern): 定义 适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。 意图:将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作...

362

Java设计模式之Adapter模式

一、概述:提到Adapter适配器相信很多人都特别熟悉了,在我们开发中经常出现一些实现继承适配器去完成某项功能,使用最多的可能就是ListView和RecyclerView的是适配器了,不知道有没有同学想过适配器的作用呢?为什么要使用这些适配器?以及他们所带来的好处呢?下面我们举个例子:如果你去了某个地方,准备要给你的手机充电,发现整个房间的都是三孔插座,而你的手机充电器只能使用两空,这时你会去前...

浅谈Android 766

[设计模式]Adapter适配器模式

Adapter适配器模式 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 通俗的说就是,A类想调用B类的方法,只能通过创建适配器的方法来调用;结合代码来说就是,目标类想调用被适配者类的方法,是通过适配者类来调用的。 双方都不适合修改的时候,可以考虑使用适配器模式。 Adapter模式其实就是把完成同样的一个功能但...

超越 1420

设计模式——适配器模式(Adapter)

基本概念 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。          在GoF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式。适配器模式还有一个特例,就是缺省适配模式(Default Adapter),又称接口适配模式。 1、 类适配器模式         把适配类的API转换成目标类

在路上 3127
上一篇: Ant与Eclipse的集成
下一篇: Java基础:Java泛型编程快速入门
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值