适配器

Android中常用适配器及定义自己的适配器 一,适配器.          顾名思义,就是把一些数据给弄得适当,适合以便于在View上显示。可以看作是 界面数据绑定的一种理解。它所操纵的数据一般都是一些比较复杂的数据,如数组,链表, 数据库,集合等。适配器就像显示器,把复杂的东西按人可以接受的方式来展现 阅读详情

1. 概述

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

2. 解决的问题

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

  下面是两个非常形象的例子

这里写图片描述

这里写图片描述

3. 模式中的角色

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

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

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

4. 实现方式

(1)类的适配器模式(采用继承实现)

 (2)对象适配器(采用对象组合方式实现)

适配器模式的类图

这里写图片描述

4.1. 类的适配器模式

[java] view plain copy print?在CODE上查看代码片派生到我的代码片
// 已存在的、具有特殊功能、但不符合我们既有的标准接口的类
class Adaptee {
public void specificRequest() {
System.out.println(“被适配类具有 特殊功能…”);
}
}

// 目标接口,或称为标准接口
interface Target {
public void request();
}

// 具体目标类,只提供普通功能
class ConcreteTarget implements Target {
public void request() {
System.out.println(“普通类 具有 普通功能…”);
}
}

// 适配器类,继承了被适配类,同时实现标准接口
class Adapter extends Adaptee implements Target{
public void request() {
super.specificRequest();
}
}

// 测试类public class Client {
public static void main(String[] args) {
// 使用普通功能类
Target concreteTarget = new ConcreteTarget();
concreteTarget.request();

    // 使用特殊功能类,即适配类  
    Target adapter = new Adapter();  
    adapter.request();  
}  

}

测试结果:

[java] view plain copy print?在CODE上查看代码片派生到我的代码片
普通类 具有 普通功能…
被适配类具有 特殊功能…

上面这种实现的适配器称为类适配器,因为 Adapter 类既继承了 Adaptee (被适配类),也实现了 Target 接口(因为 Java 不支持多继承,所以这样来实现),在 Client 类中我们可以根据需要选择并创建任一种符合需求的子类,来实现具体功能。另外一种适配器模式是对象适配器,它不是使用多继承或继承再实现的方式,而是使用直接关联,或者称为委托的方式,类图如下:

代码如下:
[java] view plain copy print?在CODE上查看代码片派生到我的代码片
// 适配器类,直接关联被适配类,同时实现标准接口
class Adapter implements Target{
// 直接关联被适配类
private Adaptee adaptee;

// 可以通过构造函数传入具体需要适配的被适配类对象  
public Adapter (Adaptee adaptee) {  
    this.adaptee = adaptee;  
}  

public void request() {  
    // 这里是使用委托的方式完成特殊功能  
    this.adaptee.specificRequest();  
}  

}

// 测试类
public class Client {
public static void main(String[] args) {
// 使用普通功能类
Target concreteTarget = new ConcreteTarget();
concreteTarget.request();

    // 使用特殊功能类,即适配类,  
    // 需要先创建一个被适配类的对象作为参数  
    Target adapter = new Adapter(new Adaptee());  
    adapter.request();  
}  

}

测试结果与上面的一致。从类图中我们也知道需要修改的只不过就是 Adapter 类的内部结构,即 Adapter 自身必须先拥有一个被适配类的对象,再把具体的特殊功能委托给这个对象来实现。使用对象适配器模式,可以使得 Adapter 类(适配类)根据传入的 Adaptee 对象达到适配多个不同被适配类的功能,当然,此时我们可以为多个被适配类提取出一个接口或抽象类。这样看起来的话,似乎对象适配器模式更加灵活一点。

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 手机电源适配器

适配器模式(类适配器,对象适配器) / IPlayer.cs - Target接口// 玩家角色攻击// 玩家角色移动// Robot.cs - Adaptee类,来自第三方库,接口不兼容Console.WriteLine("机器人发射武器!");Console.WriteLine("机器人行走!");IPlayerIPlayer接口:定义了客户端期望的接口(Attack()和Move()Robot类:提供了实际的功能(和Walk()),但接口与IPlayer不兼容。不兼容的部分:方法名称不同(Attack()vsMove() 阅读详情

相关推荐

复信号的调制与解调(基带)

Digital modulation methods can be considered as digital-to-analog conversion and the corresponding demodulation or detection as analog-to-digital conversion. 数字调制可以看成是数字到模拟的变换,同样,数字解调也可以看作是模拟向数字的转换。

JonTargaryen的博客 1万+

代码详解适配器模式

文章目录适配器模式适配器的定义适配器的类图代码实例总结 适配器模式 适配器的定义 将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间 适配器的类图 代码实例 鸭子的接口(interface Target) interface Duck{ void scream(); } 绿帽鸭(ConcreteTarget) class GreenDuck implements Duck{ public void scream() { System.o

zycxnanwang的博客 1470

Dev C++调试程序方法详解

Dev C++调试程序方法详解

weixin_70641798的博客 1万+

适配器模式代码

【代码】适配器模式代码。

m0_59076472的博客 255

【3d打印】基于Klipper的3d打印远程上位机系统(Qt),klipper源码,通信解析,打印参数设置

基于Klipper的3d打印远程上位机系统(Qt),klipper源码,通信解析,打印参数设置(启庞Kp3s V1)

共享IT之美,共创机器未来 3193

海上AI导航系统:技术架构与行业应用解析

计算机视觉与强化学习技术在海上导航系统中的应用正逐步改变传统航运业。通过多模态传感器融合技术,现代AI导航系统能够实现高精度的物体识别与实时路径规划,有效解决能见度依赖、决策延迟等核心痛点。以Orca AI的SeaPod系统为例,其结合了NVIDIA GeForce RTX 4070的边缘计算能力与多光谱协同识别技术,在恶劣环境下仍能保持稳定性能。这类系统不仅提升了航行安全性,还通过优化航线显著降低燃油消耗,在东京湾、马六甲海峡等繁忙水域展现出巨大价值。随着毫米波雷达融合方案的测试推进,未来海上导航将突破极

weixin_33597080的博客 355

Java设计模式-适配器模式

适配器模式还是比较简单的,当一个系统的数据和行为都正确,但是接口不符合的时候,应该考虑使用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。其实适配器模式在一个程序从0到1再到n的过程中基本是用不到的,因为一个独立的系统,一开始到最后的设计都会考虑到自身的易用性的。适配器一般出现在需要使用第三方服务或者改造旧项目的场景中。

我的小幸运呢 291

Matlab中eig内置函数转为C语言

本文记录一下如何将MATLAB中的eig函数转为C语言,即通过C语言求解矩阵的特征值与特征向量。[V,D]=eig(Rx)中V为矩阵Rx的特征向量,D为矩阵的特征值。其中Rx维度为12*12的复矩阵。 首先在MATLAB端创建入口函数保存为eigvalue.m: 打开MATLAB Coder,添加入口函数: 3.在定义输入类型窗口中,需要添加输入数据来训练...

u011441044的博客 3516

设计模式之适配器模式(通俗易懂--代码辅助理解【Java版】)

创建型模式:工厂方法、抽象方法、建造者、原型、单例。结构型模式有:适配器、桥接、组合、装饰器、外观、享元、代理。行为型模式有:责任链、命令、解释器、迭代器、中介、备忘录、观察者、状态、策略、模板方法、访问者。常用设计模式:单例模式、工厂模式、代理模式、策略模式&模板模式、门面模式、责任链模式、装饰器模式、组合模式、builder模式。/*** 定义一个手机Phone,它有一个Typec接口。*/System.out.println("信息从Typec口的手机输出。");/**

qq_45929019的博客 1780

大语言模型与ROS集成的自然语言机器人控制:开源框架与应用实例

近年来,大语言模型(LLM)与机器人操作系统(ROS)的集成逐步成熟,使得自然语言驱动的机器人控制成为可能。用户输入“捡起绿色方块”或“把微波炉里的饭热好端过来”这类日常语句,机器人能够自动拆解步骤、规划动作并执行。本文梳理2026年前后发布的三个代表性开源框架——ROS-LLM、ROSClaw以及LLM+Nav2基准测试系统,介绍其技术路径与工程落地情况。

Studying…… 634

DJI O2协议物理层逆向工程解析:揭开无人机通信的神秘面纱

DJI的O2协议是其OcuSync传输技术的最新演进,应用于Mini 2、Mavic Air 2、Mavic Air 2s和Mavic 3等无人机模型。这种协议结合了多种先进无线通信技术,能够在远距离提供稳定可靠的低延迟连接。O2协议物理层(PHY)是OSI模型的最底层,负责在物理媒介上传输原始数据比特流。它定义了电气特性、调制方式、编码方案、数据传输速率和同步机制等。DJI O2协议的物理层逆向工程是一个复杂但极具价值的领域。

QQ_778132974的博客 2389

一看就会-适配器模式(含代码讲解)

在软件开发中,我们经常会遇到各种各样的类库和组件,它们可能拥有不同的接口设计,导致无法直接协同工作。这时,适配器模式(Adapter Pattern)就派上用场了。

我爱JAVA 2020

Android平台实现Airplay的方法及源代码

Airplay是由苹果公司推出的一项无线音视频传输技术,它允许用户将音频、视频和照片从iOS设备(如iPhone、iPad)或Mac电脑无线传输到支持Airplay的设备(如Apple TV、智能音箱等)。具体的解码和播放方式取决于你选择的库和技术。当Android设备启动AirplayService服务后,它将监听来自iOS设备的连接请求,并在建立连接后接收、解码和播放音视频数据。在AirplayService类的onStartCommand()方法中,我们需要处理Airplay的请求。

CyberLynxX的博客 1600

设计模式-适配器模式(类适配器、对象适配器、接口适配器详解)

适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。 文章目录 适配器模式 类适配器 对象适配器 接口适配器 总结

有一分热,发一分光。 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

适配器模式(类适配器,对象适配器,接口适配器)

现实生活中的适配器例子 泰国插座用的是两孔的(欧标),可以买个多功能转换插头(适配器) ,这样就可以使用了。 基本介绍 适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本 因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper) 适配器模式属于结构型模式 主要分为三类:类适配器模式、对象适配器模式、接口适配器模式 工作原理 适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容 从用户的角度看不到

笔记别偷看 1834

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【STL十二】适配器——容器适配器

适配器种类:容器适配器、迭代器适配器、函数适配器

junxuezheng的博客 1743

jre9下载 jdk9

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

详解适配器模式--类适配器、对象适配器、接口适配器

前言 前面两篇博客写了详解单例模式六种写法的优缺点和详解原型模式的浅复制(浅拷贝)和深复制(深拷贝), 感觉效果还不错。 下面来说一下适配器模式, 说起适配器模式不妨举个例子 手机充电器, 我们手机充电的时候会把220V的电压转为5V(现在手机基本上都是5V), 这就和我们要说的适配器模式很像, 下面围绕着这个例子来写一下代码 类适配器 首先我们先写一个插孔(提供220V的电压) publi...

志不强者智不达,言不信者行不果 1485

Java设计模式 —— 【结构型模式】适配器模式(类的适配器、对象适配器、接口适配器)详解

适配器模式最大的作用还是将原本不兼容的接口融合在一起工作;将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构;增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用;灵活性和扩展性都非常好,通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合“开闭原则”。

知唔猪的博客 1738

什么是适配器?

什么是适配器? 适配器是一种设计模式 适配器模式:将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 使用场景: 已经存在的类的接口不符合我们的需求 创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。 在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类。 SpringMVC中的适配器 首先找到前端控制器DispatcherServlet可以理解为适配器中的

weixin_43573186的博客 4935

STL适配器详解

适配器本身是一个新的自定义类型 class/struct,其中会包含一个或多个辅助的所适配的类型的成员,并对内含的成员的接口进行改造,再以新的适配器类型向外部提供接口。

To the beyond and infinity! 3084

适配器模式

转载请注明出处!!!http://blog.youkuaiyun.com/zhonghuan1992          所有配套代码均在github上:https://github.com/ZHONGHuanGit/DesignPattern   跟着ZHONGHuan学习设计模式 适配器模式 介绍:          现实中适配器存在很多。就好像变压器,我想读这篇文章的你,很可能是一名学生(起码

ZH de 部落格 2万+

适配器模式—类适配器、对象适配器、接口适配器(结构型)

Adapter英文翻译是转换器、适配器、接头,从名字们就应该能很好的理解。就好比是一个转换头一样,比如去国外,很多时候我们中国带过去的电器插头就需要转换器,再比如内存卡跟电脑交互,很多时候就需要一张读卡器,此时读卡器充当的就是转换器、适配器的功能。 适配器模式将一个类的接口适配成用户所期待的,一个适配器通常允许因为接口不兼容而不能一起工作的类能够在一起工作,于是需...

有问题请发邮箱dengyifanlittle@163.com进行讨论 2019

STL之函数对象适配器、取反适配器、函数指针适配器、成员函数适配器的讲解运用

​ 简述: 对于 适配器的函数对象适配器、取反适配器、函数指针适配器、成员函数适配器,做一个讲解和小例子的应用,并且简单地探究一下原理。 文章目录本博文的简述or解决问题?讲解大纲:函数对象适配器初始代码:使用步骤:代码演示:运行演示:细节方面:心得思考:取反适配器:初始代码:使用步骤:代码演示:运行演示:细节方面:心得思考:函数指针适配器:初始代码:使用步骤:代码演示:运行演示:细节方面:...

1589

设计模式之适配器模式(类适配器与对象适配器)

一、概述 1、定义         Convert the interface of a class into another interface clients expect.Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.(将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹

qq_42339210的博客 2362

类适配器和对象适配器

面向类的适配器模式”。顾名思义,这类适配器模式就是主要用于,单一的为某个类而实现适配的这样一种模式,为什么说只为某个类去实现,一会提到,我们先展示这种类适配模式的代码实现。 ========================   适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 适配器模式的用途   用电器做例子

自由自在的生活! 2771

C++ STL(十一):适配器(函数对象适配器、取反适配器、函数指针适配器、成员函数适配器)

文章目录1 函数对象适配器 1 函数对象适配器 作用:修饰函数对象/仿函数,提供适配功能。 问题案例: 使用for_each算法和函数对象/仿函数遍历容器的元素时: ①若希望原容器元素经某种运算(如与给定值100进行加法运算)后,再输出运算结果; ②给定值可作为operator()函数的参数传递(如由用户键盘输入,而非在operator()函数体内使用固定值100); ③for_each(iterator begin, iterator end, _Fn _Func)函数只支持3个参数,且第3个参数需传入

NewsomTech 1279
上一篇: 一、多线程基础
下一篇: Java中使用javadoc命令生成文档
CoderLiLe
博客等级 码龄11年 2粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值