适配器模式--设计模式

设计模式|适配器模式(Adapter Pattern) 适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。这种模式通常用于解决两个已有接口之间不兼容的情况。适配器模式使得不兼容的接口能够协同工作,而无需修改已有的代码。这对于集成已有代码库或者第三方组件时非常有用,因为它可以帮助在不破坏现有接口的情况下实现必要的功能补充。 阅读详情

转自:http://www.cnblogs.com/wangjq/archive/2012/07/09/2582485.html

1. 概述

  将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

2. 解决的问题

  即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

3. 模式中的角色

  3.1 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。

  3.2 需要适配的类(Adaptee):需要适配的类或适配者类。

  3.3 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。  

4. 模式解读

  注:在GoF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对象适配器模式。由于类适配器模式通过多重继承对一个接口与另一个接口进行匹配,而C#、java等语言都不支持多重继承,因而这里只是介绍对象适配器。

  4.1 适配器模式的类图

  

  4.2 适配器模式的代码实现

复制代码
    /// <summary>
    /// 定义客户端期待的接口
    /// </summary>
    public class Target
    {
        /// <summary>
        /// 使用virtual修饰以便子类可以重写
        /// </summary>
        public virtual void Request()
        {
            Console.WriteLine("This is a common request");
        }
    }

    /// <summary>
    /// 定义需要适配的类
    /// </summary>
    public class Adaptee
    {
        public void SpecificRequest()
        {
            Console.WriteLine("This is a special request.");
        }
    }

    /// <summary>
    /// 定义适配器
    /// </summary>
    public class Adapter:Target
    {
        // 建立一个私有的Adeptee对象
        private Adaptee adaptee = new Adaptee();

        /// <summary>
        /// 通过重写,表面上调用Request()方法,变成了实际调用SpecificRequest()
        /// </summary>
        public override void Request()
        {
            adaptee.SpecificRequest();
        }
    }
复制代码

  4.3 客户端代码

复制代码
    class Program
    {
        static void Main(string[] args)
        {
            // 对客户端来说,调用的就是Target的Request()
            Target target = new Adapter();
            target.Request();

            Console.Read();
        }
    }
复制代码

  运行结果

       This is a special request.

  

 

5. 模式总结

  5.1 优点

    5.1.1 通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的。这样做更简单、更直接、更紧凑。

    5.1.2 复用了现存的类,解决了现存类和复用环境要求不一致的问题。

    5.1.3 将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原有代码。

    5.1.4 一个对象适配器可以把多个不同的适配者类适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口。

  5.2 缺点

    对于对象适配器来说,更换适配器的实现过程比较复杂。

  5.3 适用场景

    5.3.1 系统需要使用现有的类,而这些类的接口不符合系统的接口。

    5.3.2 想要建立一个可以重用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。

    5.3.3 两个类所做的事情相同或相似,但是具有不同接口的时候。

    5.3.4 旧的系统开发的类已经实现了一些功能,但是客户端却只能以另外接口的形式访问,但我们不希望手动更改原有类的时候。

    5.3.5 使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。

6. 适配器应用举例

  6.1 使用过ADO.NET的开发人员应该都用过DataAdapter,它就是用作DataSet和数据源之间的适配器。DataAdapter通过映射Fill和Update来提供这一适配器。

  6.2 手机电源适配器

 

运动想象 (MI) 分类学习系列 (19) : EEG-TransNet 本文提出了一种基于注意力机制的卷积神经网络(EEG-TransNet),用于运动想象脑电图(MI-EEG)解码。该方法创新性地通过平均池化和方差池化提取多模态时间信息,并结合自注意力模块捕获长期依赖关系。消融实验表明,方差池化比最大池化更有效(p<0.05),且注意力模块和卷积编码器对特征判别性至关重要。可视化分析验证了该方法能学习到更具判别性的紧凑特征。该工作为MI-EEG解码提供了新的多尺度时间信息融合视角,代码已开源。 阅读详情

相关推荐

[pcie]gen6 下 L0p

000b~100b: 触发L0p 操作流程协商工作link width 到target link width.为111b:link width 硬件动态调整。硬件动态:Device control 3 register.target link width=111b当pcie链路检测到空闲状态时,设备可以主动进入L0p状态。L0p 是pcie gen6 新引入的链路状态,是L0的子状态。(5)LINK WIDTH:当LINK WIDTH CHANGE.cmd为Request时表示请求的链路宽度。

BIG_APPLE1的博客 1675

适配器模式

设计模式学习笔记-适配器模式 1. 概述   将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 2. 解决的问题   即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 3. 模式中的角色   3.1 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以

lisa890608的专栏 475

思科路由器IPv6各种路由协议配置

思科路由器IPv6路由协议配置:1、静态路由配置;2、默认路由配置;3、RIPng路由配置;4、OSPFv3路由配置。

weixin_41687096的博客 6543

Bootstrap3(1)8.15

Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的。Bootstrap 提供了一套响应式、移动设备优先的流式网格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列。网页设计中的网格用于组织内容,让网站易于浏览,并降低用户端的负载。响应式网格系统随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列。 类名:container左右留白(指最外部的div)类名:containe

weixin_68597796的博客 632

BMS | 从一串到几百串硬件架构简介

锂电池在生活中越来越多的方面扮演能源的角色,除了大家熟知的电动汽车行业,在一些消费类,工业类电子产品比如手机,电动自行车,电动工具中都有应用,追本溯源今天我们一起来学习下最基础的BMS架构。 1~4串架构 以S8241为代表的无通信/无固件/模拟器件 可实现过充保护、过放保护、过流/短路,参数由器件后缀代码决定;通信类手持设备供电系统;1~4节电池保护板架构 如图使用S-8241系列保护IC,一对充放电MOS管控制充放电的回路的切断和接通,系统供电来自于电芯电压,VM引脚用于检测过...

ningvay的博客 9917

在线考试系统源码+数据库+word+ppt(高分毕业设计)

本系统通过Spring Cloud实现微服务拆分,将授权、考试、监控等功能解耦,既保证了系统的扩展性,也便于后期维护。基于OAuth2.0的单点登录,解决多服务统一认证问题;考试与练习模式分离,满足不同场景需求;集成Druid与Hystrix,保障系统监控与稳定性。

weixin_44355158的博客 737

java 设计模式-接口型模式

接口型模式接口与抽象类的区别: 一个类可以实现(implements)任意多个接口,但只能继承(extend)一个抽象类。一个抽象类可有非抽象方法,可以定义构造器,接口的所有方法都是抽象的。 接口只能声明static final 常量,因为一般成员变量无法实例化。抽象类的方法可以是private public protected 或者默认的package接口的方法都是public。适配器模式类适

意亦逸的博客 1200

运放+三极管恒流源电路设计实战:从原理到仿真一步到位(附Multisim文件)

本文详细解析了运放与三极管构建恒流源电路的核心原理,重点阐述了负反馈机制如何实现精准的电流控制。通过Multisim仿真实战,从电路搭建、参数计算到负载调整率与动态响应分析,一步步指导设计过程,并提供常见故障的调试技巧与PCB设计要点,帮助工程师从理论平稳过渡到可靠实践。

7z8x2c4v6b9的博客 711

设计模式第9讲——适配器模式(Adapter)

适配器模式是一种结构型设计模式,它允许将不兼容的对象转换成可兼容的接口。主要目的是解决在不改变现有代码的情况下,使不兼容的接口之间能够正常工作,通过创建一个中间转换的适配器来将一个对象转换成我们所需要的接口。当我们去国外旅游时,我们可能只会汉语,而当地人只会英语,那么这个时候就需要一个翻译员(翻译软件)来帮助我们。这就类似于适配器模式,通过一个适配器将一个不兼容的接口转成另外一个接口。下面以翻译为例,介绍一下类、接口、对象适配器。

让~学习~成为一种习惯(橡 皮 人の技术博客) 3万+

爱快路由(ikuai)多WAN口配置实战:提升网络带宽与稳定性

本文详细解析了爱快路由(ikuai)多WAN口配置的实战技巧,包括双线智能分流、毫秒级故障切换和带宽叠加利用等核心功能。通过七种配置方案和智能QoS策略,帮助企业提升网络带宽与稳定性,实现99.9%以上的高可用性。

weixin_30566063的博客 698

化工设计软件:AutoCAD Plant 3D二次开发_(1).AutoCADPlant3D概述

AutoCAD Plant 3D 是一款专为化工行业设计的三维工厂设计和建模软件。它基于AutoCAD平台,提供了强大的三维建模功能和专业的化工设计工具,帮助工程师和设计师在工厂设计过程中提高效率和准确性。AutoCAD Plant 3D不仅能够创建详细的三维模型,还可以进行管道设计、设备布置、支架设计等复杂任务。通过上述案例,我们可以看出 AutoCAD Plant 3D 在化工厂设计中的强大功能和优势。该软件不仅提供了丰富的建模工具和专业的设计功能,还支持二次开发,使用户能够根据具体需求进行定制化操作。

kkchenjj的博客 1100

适配器模式(Adapter Pattern)

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

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

YOLOv11改进策略【损失函数篇】| 引入Soft-NMS,提升密集遮挡场景检测精度,包括GIoU-NMS、DIoU-NMS、CIoU-NMS、SIoU-NMS、 EIou-NMS

传统的非极大值抑制(NMS)算法在目标检测中存在一个问题,即当一个物体的检测框与具有最高得分的检测框M有重叠(在预定义的重叠阈值内)时,会将该检测框的得分设置为零,从而导致该物体可能被遗漏,降低了平均精度。为了解决这个问题,作者提出了Soft-NMS算法。本文将YOLOv11默认的NMS修改成GIoU-NMSDIoU-NMSCIoU-NMSSIoU-NMSEIou-NMS。

Limiiiing的博客 4317

设计模式之AdapterPattern适配器模式

在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。 通俗来讲,适配器就是一个中转站,把A模型转换为B模型。 适配器模式的定义与特点: 定义如下: 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,类结构型模式类之间的耦合

haoyuegongzi的博客 252

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

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

小威的博客 2万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

遇见伯灵说的博客 1816

设计模式-适配器模式-adapter pattern

类适配器通过继承实现适配,适用于适配者接口较为固定的情况。对象适配器通过组合实现适配,提供了更高的灵活性,可以在运行时动态改变适配者对象。接口适配器通常用于适配多个具有不同接口的适配者,通过实现多个接口来统一调用。在实际开发中,选择哪种适配器模式取决于具体的设计需求和现有的代码结构。

wesigj的博客 1862

【c++设计模式09】结构型1:适配器模式(Adapter Pattern)

适配器模式是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而无法合作的类能够协同工作。

junxuezheng的博客 2051

您的设计模式——适配器模式【Adapter Pattern】

这个模式也很简单,你笔记本上的那个拖在外面的黑盒子就是个适配器,一般你在中国能用,在日本也能用,虽然两个国家的的电源电压不同,中国是 220V,日本是 110V,但是这个适配器能够把这些不同的电压转换为你需要的 36V 电压,保证你的笔记本能够正常运行,那我们在设计模式中引入这个适配器模式是不是也是这个意思呢?是的,一样的作用,两个不同接口,有不同的实现,但是某一天突然上帝命令你把 B 接口 转换

504

【24种设计模式】适配器模式(Adapter Pattern)

需要注意的是,适配器模式应该在有必要时才使用。如果在系统设计初期就能够预见到接口的变化或兼容性问题,那么最好在设计阶段就进行相关调整,避免引入适配器。此外,当系统越复杂时,使用适配器模式可能会增加代码的复杂性和理解难度,因此需要在评估后谨慎使用。

Bankcary的博客 820

Carson带你学设计模式:适配器模式(Adapter Pattern)

手把手带你全面了解适配器模式

Carson带你学Android 3万+

彻底搞懂设计模式DesignPattern-适配器模式

简介 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper) 适配器模式属于结构型模式 主要分为三类:类适配器模式、对象适配器模式、接口适配器模式 工作原理 适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容 从用户的角度看不到被适配者,是解耦的 用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法 用户收到反馈结果,感觉

Ping 281

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

1、定义         适配器模式简单来说就是将一个接口转换成另一种接口,从而让原本不兼容的接口能够兼容。         从用户的角度感觉不到被适配者,实现了解耦,用户调用适配器转换出来的接口方法,适配器再调用被适配接口的相关方法,被适配的接口对于用户来说是透明,用户也无需关心被适配的接口。 2、使用场景         ① 对于不兼容类型的接口进行转换。         ② 在输入...

inventor1024的博客 387

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

目录 一、模式含义 适配器模式(Adapter Pattern):  Target(目标抽象类):  Adapter(适配器类): Adaptee(适配者类): 二、模式分类 1.类适配器 2.对象适配器 3.双向适配器 三、示例代码 Target(目标抽象类):  Adapter(适配器类): Adaptee(适配者类): 一、模式含义 适配器模式(Adapter ...

醉花妍 240

设计模式 - 学习笔记 - 适配器模式AdapterPattern

设计模式 - 学习笔记 - 适配器模式原理分析代码演示电源插座 ElectricalSocket两口插头 PlugUSB公口手机充电器(适配器) ChargerAdapter客户端 AdapterPatternDemo 原理分析 适配器就是:扩展坞、转换器、充电头。 解决的问题就是将一个目标不支持的接口,转变成一个能用的接口。 典型场景就是功能都具备,只是接口对不上。 代码演示 电源插座 ElectricalSocket public class ElectricalSocket{ public vo

灵台方寸山斜月三星洞 605
上一篇: MFC指针、句柄、ID深入理解(总结)
下一篇: c++难点(较高级使用技巧)总结
HNFXS985
博客等级 码龄14年 219粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值