适配器模式介绍

这篇具有很好参考价值的文章主要介绍了适配器模式介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

适配器模式介绍,设计模式,Java技术,适配器模式,java,设计模式

目录

一、适配器模式介绍

1.1 适配器模式定义

1.2 适配器模式原理

1.2.1 适配器模式类图

1.2.2 模式角色说明

二、适配器模式的应用

2.1 类适配器模式

2.1.1 需求说明

2.1.2 需求实现

2.1.2.1 类图

2.1.2.2 具体实现

2.1.2.2.1 SDCard接口

2.1.2.2.2 SDCardImpl实现类

2.1.2.2.3 TFCard接口

2.1.2.2.4 TFCardImpl 实现类

2.1.2.2.5 SDAdapterTF适配类

2.1.2.2.6 Computer接口调用类

2.1.2.2.7 测试类

2.2 对象适配器模式

2.2.1 需求说明

2.2.2 需求实现

2.2.2.1 类图

2.2.2.2 具体实现

2.2.2.2.1 适配器实现类

2.2.2.2.2 测试类

三、适配器模式总结

3.1 适配器模式的优点

3.2 适配器模式的缺点

3.3 适配器模式适用的场景

3.4 代理、桥接、装饰器、适配器 4 种设计模式的区别


一、适配器模式介绍

1.1 适配器模式定义

适配器模式(adapter pattern )的原始定义是:将类的接口转换为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作。

如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,
第2面供我们充电,这样使得我们的插头在当地能使用。生活中这样的例子很多,手机充电器(将220v转换为5v的电压),读卡器等,其实就是使用到了适配器模式。

适配器模式介绍,设计模式,Java技术,适配器模式,java,设计模式

适配器模式是用来做适配,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。适配器模式有两种实现方式:类适配器和对象适配器。其中,类适配器使用继承关系来实现,对象适配器使用组合关系来实现。类适配器模式的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。

1.2 适配器模式原理

1.2.1 适配器模式类图

适配器模式介绍,设计模式,Java技术,适配器模式,java,设计模式

1.2.2 模式角色说明

适配器模式(Adapter)包含以下主要角色:

  • 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
  • 适配者(Adaptee)类:适配者即被适配的角色,它是被访问和适配的现存组件库中的组件接口。
  • 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。

二、适配器模式的应用

2.1 类适配器模式

2.1.1 需求说明

假设现有一台电脑目前只能读取SD卡的信息,这时我们想要使用电脑读取TF卡的内容, 就需要将TF卡加上卡套,转换成SD卡!

2.1.2 需求实现

2.1.2.1 类图

适配器模式介绍,设计模式,Java技术,适配器模式,java,设计模式

2.1.2.2 具体实现
2.1.2.2.1 SDCard接口
package main.java.cn.test.adapter.V1;

/**
 * @author ningzhaosheng
 * @date 2024/1/14 12:07:50
 * @description SD卡接口
 */
public interface SDCard {
    //读取SD卡方法
    String readSD();

    //写入SD卡功能
    void writeSD(String msg);
}

2.1.2.2.2 SDCardImpl实现类
package main.java.cn.test.adapter.V1;

/**
 * @author ningzhaosheng
 * @date 2024/1/14 12:08:21
 * @description SD卡实现类
 */
public class SDCardImpl implements SDCard {
    @Override
    public String readSD() {
        String msg = "sd card reading data";
        return msg;
    }

    @Override
    public void writeSD(String msg) {
        System.out.println("sd card write data : " + msg);
    }
}
2.1.2.2.3 TFCard接口
package main.java.cn.test.adapter.V1;

/**
 * @author ningzhaosheng
 * @date 2024/1/14 12:09:15
 * @description TF卡接口
 */
public interface TFCard {
    //读取TF卡方法
    String readTF();

    //写入TF卡功能
    void writeTF(String msg);
}
2.1.2.2.4 TFCardImpl 实现类
package main.java.cn.test.adapter.V1;

/**
 * @author ningzhaosheng
 * @date 2024/1/14 12:09:47
 * @description TF卡实现类
 */
public class TFCardImpl implements TFCard {
    @Override
    public String readTF() {
        String msg = "tf card reading data";
        return msg;

    }

    @Override
    public void writeTF(String msg) {
        System.out.println("tf card write data : " + msg);

    }
}

2.1.2.2.5 SDAdapterTF适配类
package main.java.cn.test.adapter.V1;

/**
 * @author ningzhaosheng
 * @date 2024/1/14 12:10:29
 * @description 定义适配器类(SD兼容TF)
 */
public class SDAdapterTF extends TFCardImpl implements SDCard {
    @Override
    public String readSD() {
        System.out.println("adapter read tf card ");
        return readTF();
    }

    @Override
    public void writeSD(String msg) {
        System.out.println("adapter write tf card");
        writeTF(msg);
    }
}

2.1.2.2.6 Computer接口调用类
package main.java.cn.test.adapter.V1;

/**
 * @author ningzhaosheng
 * @date 2024/1/14 12:13:15
 * @description
 */
public class Computer{
    public String read(SDCard sdCard) {
        return sdCard.readSD();
    };
}

2.1.2.2.7 测试类
package main.java.cn.test.adapter.V1;

/**
 * @author ningzhaosheng
 * @date 2024/1/14 12:11:39
 * @description 测试类
 */
public class Test {
    public static void main(String[] args) {
        Computer computer = new Computer();
        SDCard sdCard = new SDCardImpl();
        System.out.println(computer.read(sdCard));
        System.out.println("========================");
        SDAdapterTF adapterTF = new SDAdapterTF();
        System.out.println(computer.read(adapterTF));
    }
}

适配器模式介绍,设计模式,Java技术,适配器模式,java,设计模式

2.2 对象适配器模式

2.2.1 需求说明

假设现有一台电脑目前只能读取SD卡的信息,这时我们想要使用电脑读取TF卡的内容, 就需要将TF卡加上卡套,转换成SD卡! 适用对象适配器模式实现。

2.2.2 需求实现

2.2.2.1 类图

适配器模式介绍,设计模式,Java技术,适配器模式,java,设计模式

2.2.2.2 具体实现
2.2.2.2.1 适配器实现类
package main.java.cn.test.adapter.V2;

import main.java.cn.test.adapter.V1.SDCard;
import main.java.cn.test.adapter.V1.TFCard;

/**
 * @author ningzhaosheng
 * @date 2024/1/14 12:31:54
 * @description 定义适配器类(SD兼容TF)
 */
public class SDAdapterTF implements SDCard {
    private TFCard tfCard;

    public SDAdapterTF(TFCard tfCard) {
        this.tfCard = tfCard;
    }

    @Override
    public String readSD() {
        System.out.println("adapter read tf card ");
        return tfCard.readTF();
    }

    @Override
    public void writeSD(String msg) {
        System.out.println("adapter write tf card");
        tfCard.writeTF(msg);

    }
}

2.2.2.2.2 测试类
package main.java.cn.test.adapter.V2;

import main.java.cn.test.adapter.V1.*;

/**
 * @author ningzhaosheng
 * @date 2024/1/14 12:33:18
 * @description
 */
public class Test2 {
    public static void main(String[] args) {
        Computer computer = new Computer();
        SDCard sdCard = new SDCardImpl();
        System.out.println(computer.read(sdCard));
        System.out.println("========================");
        TFCard tfCard = new TFCardImpl();
        SDAdapterTF adapterTF = new SDAdapterTF(tfCard);
        System.out.println(computer.read(adapterTF));
    }
}

适配器模式介绍,设计模式,Java技术,适配器模式,java,设计模式

三、适配器模式总结

3.1 适配器模式的优点

1. 将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无序修改原有结构
2. 增加了类的透明性和复用性,将具体业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用。
3. 灵活性和扩展性都非常好,通过使用配置文件可以很方便的更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,符合开闭原则。

3.2 适配器模式的缺点

  • 类适配器的缺点
  1. 对于Java等不支持多重继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者
  2. 适配者类不能为最终类
  • 对象适配器的缺点
  1. 与类适配器模式相比较,在该模式下要在适配器中置换适配者类的某些方法比较麻烦。

3.3 适配器模式适用的场景

  • 统一多个类的接口设计时

某个功能的实现依赖多个外部系统(或者说类)。通过适配器模式,将它们的接口适配为统一的接口定义

  • 需要依赖外部系统时

当我们把项目中依赖的一个外部系统替换为另一个外部系统的时候,利用适配器模式,可以减少对代码的改动

  • 原有接口无法修改时或者原有接口功能太老旧但又需要兼容;

JDK1.0 Enumeration 到 Iterator 的替换,适用适配器模式保留Enumeration 类,并将其实现替换为直接调用 Itertor。

  • 适配不同数据格式时;

Slf4j 日志框架,定义打印日志的统一接口,提供针对不同日志框架的适配器

3.4 代理、桥接、装饰器、适配器 4 种设计模式的区别

代理、桥接、装饰器、适配器,这 4 种模式是比较常用的结构型设计模式。它们的代码结构非常相似。但其各自的用意却不同,简单说一下它们之间的关系。

  • 代理模式:

代理模式在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问,而非加强功能,这是它跟装饰器模式最大的不同。

  • 桥接模式:

桥接模式的目的是将接口部分和实现部分分离,从而让它们可以较为容易、也相对独立地加以改变。

  • 装饰器模式:

装饰者模式在不改变原始类接口的情况下,对原始类功能进行增强,并且支持多个装饰器的嵌套使用。

  • 适配器模式:

将一个类的接口转换为客户希望的另一个接口.适配器模式让那些不兼容的类可以一起工作。

好了,本次分享就到这里,欢迎大家继续阅读《设计模式》专栏其他设计模式内容,如果有帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!文章来源地址https://www.toymoban.com/news/detail-796957.html

到了这里,关于适配器模式介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java设计模式之适配器模式详解

    大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在今天的篇章中,我们将深入探讨Java设计模式的奇妙世界,而焦点就是适配器模式。这种模式就像是代码变换的艺术大师,让不同的接口和类在项目中和谐

    2024年01月19日
    浏览(49)
  • Java与设计模式(7):适配器模式

    适配器模式是一种结构型设计模式,它允许将一个类的接口转换为客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而无法一起工作的类能够协同工作。 适配器模式通过引入一个适配器类来解决接口不兼容的问题。适配器类实现了客户端所期望的目标接口,并

    2024年02月11日
    浏览(47)
  • 重读Java设计模式: 适配器模式解析

    在软件开发中,经常会遇到不同接口之间的兼容性问题。当需要使用一个已有的类,但其接口与我们所需的不兼容时,我们可以通过适配器模式来解决这一问题。适配器模式是一种结构型设计模式,它允许接口不兼容的类之间进行合作。本文将深入探讨适配器模式的概念、应

    2024年04月09日
    浏览(78)
  • Java设计模式-结构型-适配器模式

    ​ 与电源适配器相似,在适配器模式中引入了一个被称为适配器(Adapter)的包装类,而它所包装的对象称为适配者(Adaptee),即被适配的类。适配器的实现就是把客户类的请求转化为对适配者的相应接口的调用。也就是说:当客户类调用适配器的方法时,在适配器类的内部将调用

    2024年02月20日
    浏览(57)
  • 【Java 设计模式】结构型之适配器模式

    适配器模式(Adapter Pattern)是一种结构型设计模式, 用于将一个类的接口转换成客户端期望的另一个接口 。这种模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。在本文中,我们将介绍 Java 中适配器模式的定义、结构、使用场景以及如何在实际开发中应用。

    2024年01月19日
    浏览(46)
  • 设计模式--适配器模式

    目录 基本介绍 工作原理 类适配模式 介绍 应用实例介绍 类适配器模式注意事项和细节 对象适配模式 介绍 对象适配器模式注意事项和细节 接口适配器模式 介绍 适配器模式的注意事项和细节  (1) 适配器模式(Adapter Pattern) 将某个类的接口转换成客户端期望的另一个接口表示

    2023年04月26日
    浏览(44)
  • 设计模式-适配器模式

    在我们生活中,插座输出的电源都是220V的,而我们手机充电需要的电压基本都是5V的。我们不能直接用220V的电压来给手机充电,也不能说专门有线路来提供5V的电压。所以就有了充电器,充电器可以将220V的电压转为5V的电压,这样我们就方便太多了。 上面所说的充电器其实就

    2024年02月08日
    浏览(47)
  • 设计模式——适配器模式

    说起适配器其实在我们的生活中是非常常见的,比如:学校的宿舍的电压都比较低,而有的学生想使用大功率电器,宿舍的就会跳闸,然而如果你使用一个适配器(变压器)就可以使用了(温馨提示宿舍使用大功率电器不太安全,容易引起火灾,希望大家谨慎使用)。 又比如

    2024年02月12日
    浏览(59)
  • 【设计模式】适配器模式

    适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。

    2024年02月12日
    浏览(60)
  • 【Java面试题】设计模式之七种结构性模式——代理模式、适配器模式、桥接模式、装饰模式、外观模式、享元模式、组合模式

    目录 一、代理模式 二、适配器模式 三、桥接模式 四、装饰模式 五、外观模式 六、享元模式 七、组合模式 概念: 代理模式是为其他对象提供一种以代理控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对

    2023年04月09日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包