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

java设计模式(七)适配器模式(Adapter Pattern) 适配器模式(Adapter Pattern)的介绍、应用场景、优缺点以及代码实现。 阅读详情
           通常情况下,客户端可以通过目标类的接口访问它所提供的服务。有时候,现有的类可以满足客户类功能需要,但是它所提供的接口不一定是客户类所期望的,这可能是因为现有类中方法名与目标类中定义的方法名不一致等原因所导致的。在这种情况下,现有的接口需要转化为客户类期望的接口,这样保证了对现有类的重用。如果不进行这样的转化,客户类就不能利用现有类所提供的功能,适配器模式可以完成这样的转化。

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

结构:
  • Target(目标抽象类):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。
  • Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配,适配器类是适配器模式的核心,在对象适配器中,它通过继承Target并关联一个Adaptee对象使二者产生联系。
  • Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。

      适配器有两种,一种是类适配器,一种是对象适配器。

对象适配器结构图如下:


类适配器结构图如下:


实例解析:比如一家公司,有一套员工管理系统,负责统计公司员工的基本信息,现在由于业务扩展,找一个外包公司帮忙开展部分业务,而且需要将外包参与的人员信息录入到本公司信息系统中,不过外包公司也有自己的一套管理系统,跟公司的员工管理类完全不一样。  UML图如下:

代码分析:
public interface IMyEmployeeInfo {
    //获取员工姓名
    public String getName();
    // 获取员工年龄
    public int getAge();
    // 获取员工所在部门
    public Object getDepartment();
    // 获取员工电话
    public String getPhoneNumber();
}

public class MyEmployeeInfo implements IMyEmployeeInfo{
    private final String TAG = "test";
    private String name = "小张";
    private int age = 20;
    private String department = "研发部";
    private String number = "123456";
    @Override
    public String getName() {
        Log.d(TAG,"姓名:"+name);
        return name;
    }

    @Override
    public int getAge() {
        Log.d(TAG,"年龄:"+age);
        return age;
    }

    @Override
    public String getDepartment() {
        Log.d(TAG,"所在部门:"+department);
        return department;
    }

    @Override
    public String getPhoneNumber() {
        Log.d(TAG,"电话:"+number);
        return number;
    }

}

public interface IOuterInfo {
    //获取员工基本信息
    public Map getBaseInfo();
    // 获取员工部门信息
    public Map getOfficeInfo();
}

public class OuterEmployeeInfo implements IOuterInfo {
    @Override
    public Map getBaseInfo() {
        HashMap baseInfoMap = new HashMap();
        baseInfoMap.put("name","小李");
        baseInfoMap.put("age","35");
        baseInfoMap.put("number","88888888");
        return baseInfoMap;
    }

    @Override
    public Map getOfficeInfo() {
        HashMap officeInfoMap = new HashMap();
        officeInfoMap.put("office","代码组");
        return officeInfoMap;
    }
}

public class EmployeeInfoAdapter extends OuterEmployeeInfo implements IMyEmployeeInfo {
    private final String TAG = "adapter";
    private Map baseInfo = super.getBaseInfo();
    private Map officeInfo = super.getOfficeInfo();
    @Override
    public String getName() {
        String name = (String) this.baseInfo.get("name");
        Log.d(TAG,"OuterName: "+name);
        return name;
    }

    @Override
    public int getAge() {
        int age = (int) this.baseInfo.get("age");
        Log.d(TAG,"OuterAge: "+age);
        return age;
    }

    @Override
    public String getDepartment() {
        String office = (String) this.officeInfo.get("office");
        Log.d(TAG,"OuterOffice: "+office);
        return office;
    }

    @Override
    public String getPhoneNumber() {
        String number = (String) this.baseInfo.get("number");
        Log.d(TAG,"OuterNumber: "+number);
        return number;
    }
}

// 没有适配前,查看本公司员工信息
IMyEmployeeInfo myEmployeeInfo = new MyEmployeeInfo();
String name = myEmployeeInfo.getName();

// 用适配器模式后,查看的是外包公司员工信息了,相对适配前只修改了一行代码
IMyEmployeeInfo employeeInfoAdapter = new EmployeeInfoAdapter();
String outerName = employeeInfoAdapter.getName();
     
      以上是类适配器的实例,如果是对象适配器,则适配器类(adapter)继承的适配者类(adaptee)改成在适配器类去实例化适配者类,拿到该对象,再去调用适配者类的方法获取相关的信息就行了。

优点:
  • 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,而无须修改原有代码。
  • 增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性。
  • 灵活性和扩展性都非常好,通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合“开闭原则”。
类适配器模式还具有如下优点:
  • 由于适配器类是适配者类的子类,因此可以在适配器类中置换一些适配者的方法,使得适配器的灵活性更强。
对象适配器模式还具有如下优点:
  • 一个对象适配器可以把多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口。


缺点:
  • 类适配器模式的缺点如下:
        对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为抽象类,不能为具体类,其使用有一定的局限性, 不能将一个适配者类和它的子类都适配到目标接口。
  • 对象适配器模式的缺点如下:
        与类适配器模式相比,要想置换适配者类的方法就不容易。如果一定要置换掉适配者类的一个或多个方法,就只好先做一个适配者类的子类, 将适配者类的方法置换掉,然后再把适配者类的子类当做真正的适配者进行适配,实现过程较为复杂。

适用环境:
  • 系统需要使用现有的类,而这些类的接口不符合系统的需要。
  • 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。

扩展:
认适配器模式(Default Adapter Pattern)或缺省适配器模式
        当不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可有选择地覆盖父类的某些方法来实现需求,它适用于一个接口不想使用其所有的方法的情况。因此也称为单接口适配器模式。


【Java设计模式】Java设计模式之(十七)适配器模式(Adapter Pattern) 这种类型的设计模式属于结构型模式。 一、适配器模式介绍 1.1 含义 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。 我们通过下面的实例来演示适配器模式的使用。其中,音频播放器设备只能播放 mp3 文件,通 阅读详情

相关推荐

【物联网】探索NE555:一款经典的集成电路(超详细)

NE555是一种集成电路,其内部结构包括比较器、RS触发器、电压比较器和输出级三个主要功能模块,外部引脚则提供了与其他电路元件进行连接的接口。NE555的设计目的是为了提供一种简单方便的定时器解决方案,它广泛应用于模拟和数字电路中。NE555作为一款经典的集成电路,具备设计简单、易于使用和稳定可靠的特点,在电子领域发展了广泛的应用。从单稳态模式到多稳态模式,再到振荡器模式,NE555可以满足不同的需求,并且可以与其他电路元件灵活组合,扩展其功能。然而,需要注意的是NE555也有一些限制。

Goforyouqp的博客 6万+

【设计模式】 适配器模式(Adapter Pattern)- 最易懂的设计模式解析

前言 今天我来全面总结一下Android开发中最常用的设计模式 - 适配器模式。 其他设计模式介绍  1分钟全面了解“设计模式”  单例模式(Singleton) - 最易懂的设计模式解析  简单工厂模式(SimpleFactoryPattern)- 最易懂的设计模式解析  工厂方法模式(Factory Method)- 最易懂的设计模式解析  抽象工厂模式(Abstra

武略的专栏 560

NVIDIA Jetson Orin Nano Super刷机避坑指南:从虚拟机配置到NVMe烧录实战

本文详细介绍了NVIDIA Jetson Orin Nano Super的完整刷机流程,涵盖虚拟机配置、SDK Manager安装、硬件连接、固件下载、rpcbind服务冲突解决以及NVMe烧录等关键步骤。重点解析了Super模式下的NVMe烧录命令参数和操作时机,帮助开发者高效完成刷机并避免常见错误。

y2z3a4b5c的博客 751

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

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

Carson带你学Android 3万+

反激开关电源变压器设计实例讲解(定明芳)

内容来自《反激变压器的设计》(定明芳主讲)。 定名芳老师主要讲了10步,最后应该还有一步,线径的选择已经绕制方式。这里进行了记录整理,把一些公式来源进行了推导。所有的设计都是基于理论计算。 1.确定电源规格 2.确定工作频率和最大占空比 3.计算匝比(利用伏秒平衡原则) 此处插入解释一下伏秒平衡,根源是磁通量平衡。该原则可以用来检查MOS管耐压是否够。 4.计算初级线圈峰值电流 基于CCM模式计算的。ip1是开关管要关闭时的峰值电流,ip2是开关管开始导通时的起始电流。因为时CCM模式,所以,ip

ydgd118的博客 5万+

VMware VSAN 高级参数介绍(测试用)

VSAN 的策略驱动让我们看到了VSAN无穷的潜力,其设计思路相当新颖,在一个基础资源池上使用策略就能实现不同对象的区分服务,而目前没有其他厂家能到VMware这样的高度。 VSAN 呈现给用户配置很简单,但实际上设计及后台比较复杂。笔者无意间发现了VSAN的隐藏高级参数设置,有很多好玩的选项想分享出来。这些参数全部是针对每主机进行设置的。VSAN 中有很多默认设置,这些设置应该都是研发人员多次测试得出的最优值,修改可能导致环境异常,并不建议修改! 目录 参数1:全闪配置下 SSD 写缓存最大.

山水牧羊 2030

适配器模式讲解

1.生活中的问题 欧洲使用的插座是圆孔的,而我国使用的是扁形的插头,如何能让国标的插头能在欧标的插座上使用呢?答案是我们可以买一个欧标插头适配器(也称插头转接器)。有了这个,国标的插头就可以使用欧标插座供电了。 在面向开发过程当中,有时候也会存在这种不兼容的情况,我们可以引入一个像是交流电适配器的我们叫他“适配器”的角色,来协调者两种不兼容的情况。这种设计方案就叫做适配器模式。 2....

GeorgeGuoo的博客 1102

PCL Alpha Shapes平面点云边界特征提取【2026最新版】

alpha shapes算法用于平面点云的边界特征提取。博客长期更新,本文最近一次更新时间为:2026年4月20日。

点云侠的博客 27万+

设计模式读书笔记-----适配器模式

假如我们又这样软件系统,我们希望它能够和一个新的库搭配使用,但是这个库所提供的接口与我们的软件系统不兼容,我们不想改变现有代码就能解决这个问题,怎么办?这个时候我们就需要将这个新的库接口转换成我们所需要的接口,这就是适配器模式设计动机。 一、模式定义 何谓适配...

chenssy 的技术博客 546

【全网最新OD题库】2026华为 OD 机试C卷 机考真题库清单(全真题库)含考点说明(华为OD+2025年C卷+2025年B卷+2025年A卷+E卷+D卷+C卷)

华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2024e卷,od机试,2024E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2024华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试2024年最新题库,一文带你读懂华为OD,华为机试e卷,华为OD2025B卷、华

KJ.JK 3万+

2024年上半年试题二:论性能测试方法及其应用

2025年1月,我以系统分析师的身份参与了公司OA系统的开发与建设。该系统包含的功能有打卡签到、公文流转、工资查询等。我们吸取了之前由于系统使用人数激增暴露出的短时间卡顿等问题,所以在本次开发中,我们非常重视系统的性能测试。通过自动化的测试工具模拟多种正常、峰值及异常负载条件对系统的各项性能指标进行测试。性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样,常见的负载测试和压力测试都属于性能测试。

银帅 548

10、ThinkInJava(java编程思想)第九章 接口(适配器设计模式) 笔记

接口(只存在常量和抽象方法)和内部类提供了一种将接口(对外提供的方法)与实现分离的更加结构化的方法 建立通用接口的唯一理由是,不同的子类可以用不同的方式表示此接口。 9.3 完全解耦 适配器模式 /: interfaces/filters/Waveform.java package com.fjnx.history.sourcecode.interfaces.filters; public...

weixin_42504840的博客 225

乐企归集能力说明文档V2.0006

纳税人销售货物、提供服务开具的增值税发票及购进货物、接受服务取得的增值税发票、海关缴款书(含出口转内销证明)、代扣代缴完税凭证,可以通过本能力进行归集。纳税人可将本能力中的各类规则和接口嵌入本单位信息化系统中(如:销售、报销、财务等),实现发票自动化归集,便于纳税人完成发票入账、抵扣、退税以及代办退税等操作,有效提升涉税业务办理效率。

记录点滴 573

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

Java设计模式之适配器模式(Adapter Pattern),适配器模式是Java中的结构性模式的一种,最近详细的比较安卓中的Listview和RecycleView的区别,有一点很明显,就是RecycleView中就根本没有添加header和footer的方法,像这种方法也是我们平时常用的,那么只能自己封装了,参考了Listview的做法发现里面用到了适配器的模式就静下心来好好研究了下适配器模...

weixin_39967120的博客 200

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

pscad IEEE标准系统搭建说明

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

adapter pattern java_Java设计模式之适配器模式Adapter Pattern

适配器模式Adapter Pattern类型:结构型模式定义:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。--《JAVA与模式》优点:更好的复用性更好的扩展性缺点:过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。...

weixin_42321940的博客 265

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

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

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

适配器模式(Adapter Pattern)是一种结构型设计模式;用于将一个类的接口转换成另一个接口,从而满足客户端对接口的需求;在适配器模式中,适配器充当一个中间层,通过实现目标接口并持有原始类的实例来实现对原始类的封装和转换。客户端只需要调用目标接口中定义的方法即可完成对原始类的调用。适配器模式在Java中广泛应用于各种场景,例如,将旧版API适配到新版API、将不同的数据格式适配到统一的数据格式等。所以,适配器模式是个非常非常重要的,是个非常强的设计模式!

是个非常热爱生活、乐观、奋斗、努力的逗比青年 4067

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

适配器模式是一种强大的设计模式,它允许我们将不兼容的接口转换为统一的接口,从而简化了系统的集成过程。然而,我们也需要注意到,适配器模式并不是万能的。通过创建适配器,我们可以将遗留系统的接口转换为现代系统所使用的接口,从而实现遗留系统与新系统的无缝集成。工厂模式可以根据输入的参数或配置,返回不同的适配器实例,这样客户端代码就不需要直接创建适配器对象,而是通过工厂来获取所需的适配器。例如,在处理不同格式的数据转换时,我们可以使用策略模式定义多种转换策略,然后在适配器中根据输入数据的格式选择合适的策略进行转换。

新手村长的专栏 2195

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

Java设计模式、适配器模式、Adapter Pattern

scorpio的博客 1043

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

适配器模式是一种解决。

空 1090

Java23种设计模式 适配器模式【Adapter Pattern】

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

宇智波带土 340

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

适配器模式定义: 将一个类的接口,转换成客户期望的另外一个接口。适配器让原本接口不兼容的类可以合作无间。 适配器模式UML图: 对象适配器: 使用对象组合,以修改的接口包装被适配者:这种做法还有额外的优点,那就是,被适配的任何子类,都可以搭配着适配器使用 类适配器: 对象适配器和类适配器的区别就是类适配器继承了Targt和Adaptee,而对象适配器使用组合的方式将请求传递给被适配者。 实例代码: 现在有两个类,一个鸭子,一个火鸡,如下所示: public interface

及时雨的csdn 598

DesignPattern_Java:Adapter Pattern

适配器模式 Adapter Pattern 变压器模式Convert the interface of a class into another interface clients expect.Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.将一个类的接口变换

Anonymous 2342

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

适配器模式作为一种结构型设计模式,在软件系统设计开发中使用到的频率非常之高,比如Java中的jdbc。本文结合具体案例讲解适配器模式的知识要点。

IT熊的专栏 387

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

主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式 类的适配器模式 public class DesignPatternTest { @Test public void test1(){ Targetable target = new Adapter(); target.method1(); target.method2(); } } class Source { public void method1()

weixin_43920664的博客 183

Java设计模式--适配器模式【Adapter Pattern】

适配器模式,是把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配无法在一起工作的两个类可以在一起工作。   在生活中,适配器的运用也是随处可见。比如,现在中国一般的家用电器要求的电压都是220V,但是国外的电压可能是110V,那么对于常用的电器来说,从国外代购回来后怎么办?这时就需要买一个能把 220V 电压转换成 110V 电压的变压器,这个变压器就是一个适配器。不如,安卓手

CoderLover 527

Java设计模式 --适配器模式【Adapter Pattern】

系统扩展了,不符合原有设计的时候才考虑通过适配器模式减少代码修改带来的风险

One_Piece111的博客 252
上一篇: java设计模式——建造者模式(Builder Pattern)
下一篇: java设计模式——桥接模式(Bridge Pattern)
OODeveloper
博客等级 码龄12年 43粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值