Adapter 适配器模式

【DesignMode】适配器模式(adapter pattern) 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)适配器模式属于结构型模式主要分为三类:类适配器模式、对象适配器模式、接口适配器模式泰国插座用的是两孔的(欧标),可以买个多功能转换插头 (适配器) ,这样就可以使用了。适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可 阅读详情

模式定义
Adapter适配器模式将不适合客户类使用的接口重新包装,以实现接口的重用。

使用范围

  • 现有的类不能被客户类直接使用或不方便使用

使用方法
适配器模式分两类:

  • 类适配器:类适配器是通过继承类适配者类(Adaptee Class)实现的,另外类适配器实现客户类所需要的接口。当客户对象调用适配器类方法的时候,适配器内部调用它所继承的适配者的方法。
  • 对象适配器:对象适配器包含一个适配器者的引用(reference),与类适配器相同,对象适配器也实现了客户类需要的接口。当客户对象调用对象适配器的方法的时候,对象适配器调它所包含的适配器者实例的适当方法。

通俗一点来讲,类适配器的实现是基于类继承的概念,而对象适配器模式是使用了类的合成的方法。而被适配的对象或类则称为Adaptee。

举例说明

public class User {
private String userID;
private String userPwd;
private String userPostcode;
private static String userChina = "CHINA";
private static String userUsa = "USA";
public String getUserID() {
return userID;
}
public void setUserID(String userID) {
this.userID = userID;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public String getUserPostcode() {
return userPostcode;
}
public void setUserPostcode(String userPostcode) {
this.userPostcode = userPostcode;
}

public boolean checkPostcode(){
...

}

}

客户端创建一个User类的实例,同时需要去检查这个user的postcode的合法性(checkPostcode),可以使用一个postcode的验证类(假设为ChinaPostcode)来完成,而这个验证类为实现代码的可扩展的功能,可以将其公用方法提炼出来作为一个接口(PostcodeValidator)。

public interface PostcodeValidator {
public boolean isPoatcodeCorrect(String postCode);
}

于是这个验证类(ChinaPostcode)实现该接口:

public class ChinaPostcode implements PostcodeValidator{
public boolean isPoatcodeCorrect(String postCode) {
return postCode.length()==6;
}
}

因此,这个时候的User类的验证方法为:

public class User {
...
...
public boolean checkPostcode(){
PostcodeValidator vld = getValidator(userPostcode);
if (vld==null) return false;
return vld.isPoatcodeCorrect(userPostcode);

}

public PostcodeValidator getValidator(String userType){
PostcodeValidator vld = null;
if (userType == User.userChina){
vld = new ChinaPostcode();
}
return vld;
}

}

一切都顺理成章。接下来,客户端想要验证一个美国的postcode,同时手边已经有了一个第三方提供的现成的验证方法类,唯一的缺陷是,无法直接拿来使用,因为调用的接口完全不一样;也不能修改该代码,因为已编译或过于复杂。假设这个第三方的验证类为 UsaPostcode:

public class UsaPostcode {
public boolean validatePost(String postcode){
return postcode.length()==5;
}
}

这时,必须提供一个适配器能让客户直接使用该类。如果该适配器能享用这个第三方类的验证方法同时又能实现我们上面的公共接口,一切都可以解决了。于是就有UsaPostcodeAdapter :

public class UsaPostcodeAdapter extends UsaPostcode implements PostcodeValidator{
public boolean isPoatcodeCorrect(String postCode) {
return validatePost(postCode);
}
}

对于客户端而言,我们可以直接使用该适配器提供的类似ChinaPostcode的同样的验证方法,唯一需要修改的是在User中getValidator必须提供对UsaPostcodeAdapter的一个引用:

public class User {
...
...
public boolean checkPostcode(){
PostcodeValidator vld = getValidator(userPostcode);
if (vld==null) return false;
return vld.isPoatcodeCorrect(userPostcode);

}

public PostcodeValidator getValidator(String userType){
PostcodeValidator vld = null;
if (userType == User.userChina){
vld = new ChinaPostcode();
}
if (userType== User.userUsa){
vld = new UsaPostcodeAdapter();
}
return vld;
}

}

这里,UsaPostcode被称为Adaptee。

类结构示意 该样例的类结构如下:

下载示例

别再傻傻分不清:PX4、Pixhawk、ArduPilot、APM到底啥关系?一张图给你讲明白 本文全面解析开源飞控领域核心概念,厘清PX4、Pixhawk、ArduPilot与APM的定位与关系。通过硬件平台演进史和飞行控制软件对比,帮助开发者理解开源飞控生态,并提供新项目开发建议与特殊需求考量,助力无人机开发中的明智选择。 阅读详情

相关推荐

基于Codex平台与AI Agent技能开发,实现抖音爆款视频分析与脚本自动生成

大家好,我是专注于AI应用开发的技术博主。最近在探索如何利用AI工具自动化内容创作时,我发现了一个非常有趣的组合:通过Codex平台创建自定义的Skill(技能),来批量分析抖音平台的爆款视频,并基于分析结果自动生成新的带货视频脚本。这听起来像是内容团队的“黑科技”,但实现起来其实有清晰的路径可循。本文将为你完整拆解这个实战项目,从环境搭建、Skill编写、数据抓取到视频脚本生成,手把手教你打造自己的“AI内容助理”。无论你是想了解AI Agent的开发,还是对短视频自动化创作感兴趣,都能从本文中获得可直接

weixin_34110749的博客 645

适配器模式(Adapter Pattern)

一、定义 适配器模式(Adapter Pattern):结构型模式之一,将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。 二、UML类图 三、角色职责 目标角色(Target):该角色定义把其他类转换为何种接口,也就是我们的期望接口。 源角色(Adaptee):你想把谁转换成目标角色,这个“谁”就是源角色,它是已经存在的、运行良好的类或对象。 适配器角色(Adapter):适配器模式的核心角色,其他两个角色都是已经存在的角色,而适配器

奶油芝士蘑菇汤的博客 2万+

CTFshow-CRYPTO(持续更新)

密码学签到 }wohs.ftc{galf 将字符串逆序即可 letters = '}wohs.ftc{galf' a = list(letters) a.reverse() for letters in a: print(letters,end='') crypto2 打开浏览器的控制台,复制粘贴回车即可得到flag crypto3 这一题同上 crypto4 如图填写即可,一开始e填写的是17,一直回答错误,后来经过群内大佬提醒软件的e是十六进制的,17转十六进制就是0x11 cr

i_kei的博客 1万+

适配器模式(Adapter Pattern)

加个"适配器"以便于复用 1.使用情况 在程序世界中,经常存在现有的程序无法直接使用,需要适当的变化才能使用.这种用于填补俩个程序之间差异的设计模式就是适配器模式。 适配器模式分为以下俩种: 类适配器模式(使用继承的适配器)->类和接口 对象适配器模式(使用委托的适配器)->俩个类 2.类适配器 程序类图 Banner类 /** * @author Jay * @date...

JayCoding 313

从芯片选型到光学集成:手持激光测距仪硬件设计全解析

本文全面解析手持激光测距仪的硬件设计,从芯片选型到光学集成,详细介绍了相位法测距技术的核心原理与方案选择。通过模块化设计、信号链路优化及PCB布局技巧,实现毫米级精度。文章还分享了量产化关键控制点,帮助工程师规避常见设计陷阱,提升产品可靠性。

weixin_30425949的博客 445

【OpenCV-Python】图像的载入、显示和输出(imread()、imshow()、waitKey()、namedWindow()、imwrite())

图像的载入:imread()函数 imread()函数可以用来非常便捷地读取文件中的图片到Opencv中。这个函数一般需要两个参数: (1)载入图片的路径名。如果图像文件在工程文件夹下,可以直接用文件名读取,如“cat.jpg”,否则需要输入完整的访问路径,如“D:\\test\\lena.png”。这里还有几个tips: imread函数中,一个点代表省略当前文件夹路径,两个点则代表回...

M&Q的博客 1398

C++设计模式——适配器模式(Adapter Pattern)

C++设计模式——适配器模式(Adapter Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——适配器模式(Adapter Pattern)目录定义定义作用/解决的问题适配器模式中的角色代码示例总结优缺点适用场景参考资料 定义 定义 Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn’t ot

leonardohaig的博客 1547

深度学习注意力机制新突破:YOLOv8结合SimAM无参数注意力模块,让目标检测更精准!

在计算机视觉领域,注意力机制已成为提升模型性能的关键技术。然而,传统的注意力模块如SENet、CBAM等往往引入大量额外参数,增加了模型的复杂度和计算负担。本文介绍一种创新的无参数注意力机制——SimAM(Simple Parameter-Free Attention Module),并将其成功应用于YOLOv8目标检测框架。SimAM基于神经科学理论,通过定义能量函数为特征图计算3D注意力权重,无需任何额外参数即可显著提升模型性能。本文详细阐述了SimAM的理论基础、实现原理,并提供了完整的YOLOv8集

YOLO 102

Adapter Pattern 适配器模式

Adapter Pattern: converts the interface of a class into another interface the clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces. Use of obj

Geurney的专栏 617

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

【深度学习|地学应用】MODIS AOD产品和HYSPLIT模型的局限性和不确定性?

985小水博的摸鱼日常 464

【数据集8】全球人口数据WorldPop详解

全球人口数据WorldPop详解

WW、forever的博客 7882

适配器模式(Adapter Pattern) — Python实现

适配器模式(Adapter Pattern) — Python实现 模式动机 在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配器模式。 通常情况下,客户端可以通过目标类的接口访问它所提供的服务。有时,现有的类可以满足客户类的功能需要,但是它所提供的接口不一定是客户类所期望的,这可能是因为现有类中方法名与目标类中定义的方法名不一致等原因所导致的。 在这种情况下,现有的接口需要转化为客户类期望的接口,这样保证了对现有类的重用。如果不进行这样的转化,客户类就不能利用现有类所提供的功能,适配器模式可以完

qq_33511971的博客 512

还原 Windows 环境变量的默认值

有时候,我们可能需要还原环境变量的默认值,以修复可能的配置问题或恢复系统的正常运行。如果您只想还原某个特定的环境变量,可以跳过删除其他变量的步骤,仅删除需要还原的变量即可。在“环境变量”对话框中,继续向下滚动到“系统变量”部分。请注意,在执行以下步骤之前,您应该备份当前的环境变量设置,以便在需要时可以还原。在删除所有需要还原的环境变量后,点击“确定”按钮关闭“环境变量”对话框。在“用户变量”部分,选择需要还原的变量,然后点击“删除”按钮。在“高级”选项卡下方的“环境变量”部分,点击“环境变量”按钮。

PvDeveloper的博客 6342

适配器模式 Adapter Pattern

适配器模式  Adapter Pattern

whf96998的专栏 188

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

适配器模式 Adapter Pattern

适配器模式(也称为包装器「」,与装饰器模式「」共享的另一种命名),它允许将现有类的接口用作另一个接口。它通常用于使现有类与其他类协同工作,而无需修改其源代码。适配器模式描述了如何解决重复出现的「recurring」设计问题,以设计灵活和可重用的面向对象软件,即更容易实现、更改、测试和重用的对象。

DachuiLi的博客 918

数学建模模型总结

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

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

适配器模式(Adapter Pattern):将一个类的接口转换成为客户希望的另外一个接口.Adapter Pattern使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 这里performanceLogger 需要根据不同的需求调用ClassificationEvaluator,SegmentationEvaluator,VOCEvaluator或者COCOEvaluator类的实现 其实也可以使用工厂模式来实现。 代码来自:https://github.com/shanglianlm0525

mingo_敏 1061

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

定义 适配器模式是通过一个类的接口转换成客户希望的另外一个接口,使原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适配器从结构上可以分为类适配器和对象适配器。其中类适配器使用继承关系来对类进行适配,而对象适配器是使用对象引用的方法来进行适配的。 C#例子 public interface ITarget { void Request(); } ...

易兒善 604

适配器模式 (Adapter Pattern)

适配器模式是一种结构型设计模式,它将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

懵萌长颈鹿的博客 559

适配器模式【Adapter Pattern】

好,请安静,后排聊天的同学别吵醒前排睡觉的同学了,大家要相互理解嘛。今天讲适配器模式,这个模式也很简单,你笔记本上的那个拖在外面的黑盒子就是个适配器,一般你在中国能用,在日本也能用,虽然两个国家的的电源电压不同,中国是 220V,日本是 110V,但是这个适配器能够把这些不同的电压转换为你需要的 36V 电压,保证你的笔记本能够正常运行,那我们在设计模式中引入这个适配器模式是不是也是这个意思呢?是

admin1973的专栏 521

【图解设计模式系列】The Adapter Pattern: 适配器模式

适配器模式是将一个类的接口转换成客户希望的另一个接口,从而让那些接口不兼容的类可以一起工作。 converts the interface of a class into another interface the clients expect. Adapter lets classes works together that couldn’t otherwise because of incompatible interfaces. 适配器模式包含一下三个角色: Target(目标抽象类):目标抽象

Tech in Pieces 616

adapter pattern java_Java之适配器模式(Adapter Pattern)

1.概念:将一个接口转换成客户希望的另外一个接口。(该模式使得原本不兼容的类可以一起工作)2.UML图(1)对象的Adapter模式结构图(2)类的Adapter模式结构图3.代码(1)对象适配器public interface Target{public void Request();}public class Adaptee{public void SpecificRequest(){Syst...

weixin_30306507的博客 179
上一篇: Singleton 单态模式
下一篇: Bridge 桥接模式
zigzagsoft
博客等级 码龄19年 34粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值