Java设计模式之适配器模式的实现

 更新时间:2023年11月30日 09:58:25   作者:啊几  
这篇文章主要介绍了Java设计模式之适配器模式的实现,适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁,这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能,需要的朋友可以参考下

前言

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。

适配器的实现方式

适配器可以继承或依赖已有的对象,然后实现想要的目标接口。

示例

生活中有一个实例就是,笔记本上想要插内存卡就必须借助读卡器,读卡器就是笔记本usb接口和内部卡接口之间的适配器。

将内存卡插入读卡器,再将读卡器插入笔记本,就能实现用笔记本读取内存卡了。

继承实现

usb接口

public interface UsbInterface {
    public void read();
}

内存卡类

public class MemoryCard {
    public void readCard(){
        System.out.println("读取内存卡");
    }
}

电脑类

public class Computer {

    public void readCard(UsbInterface usb){
        usb.read();
    }
}

电脑依赖使用Usb接口,想要使用内存卡,就必须要有一个适配器读卡器

读卡器适配器类

public class CardReaderAdapter extends MemoryCard implements UsbInterface{
    @Override
    public void read() {
        readCard();
    }
}

这里使用的是继承方式,继承了内存卡类

客户端类

public class Client {
    public static void main(String[] args) {
        Computer computer = new Computer();
        computer.readCard(new CardReaderAdapter());
    }
}

使用继承暴露了所有被适配类的方法,增大了耦合性,建议使用有依赖聚合的方式

依赖实现

依赖实现的适配器

public class CardReaderAdapter implements UsbInterface {
    
    private MemoryCard card;
    CardReaderAdapter(MemoryCard card){
        this.card = card;
    }
    @Override
    public void read() {
        card.readCard();
    }
}

在Spring源码中的使用

在Spring源码中的转化服务GenericConversionService就使用到了适配器模式

在这里插入图片描述

在这里插入图片描述

addConverter(GenericConverter converter)方法需要依赖使用GenericConverter类,但是只有Converter对象,这时就需要一个适配器进行适配。

在这里插入图片描述

在这里插入图片描述

可以看到ConverterAdapter适配器实现了GenericConverter接口,并且聚合了Converter对象。这里就使用到了适配器模式。

到此这篇关于Java设计模式之适配器模式的实现的文章就介绍到这了,更多相关Java适配器模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何让Win10实现Java文件的开机自启动

    如何让Win10实现Java文件的开机自启动

    这篇文章主要介绍了如何让Win10实现Java文件的开机自启动,对于一些想要一直运行的Java文件,就会造成每次系统更新之后的重启导致Java文件无法继续运行。,需要的朋友可以参考下
    2019-06-06
  • SpringBoot使用AOP实现统计全局接口访问次数详解

    SpringBoot使用AOP实现统计全局接口访问次数详解

    这篇文章主要介绍了SpringBoot通过AOP实现对全局接口访问次数的统计,文章从相关问题展开全文内容详情,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • Spring 中使用Quartz实现任务调度

    Spring 中使用Quartz实现任务调度

    这篇文章主要介绍了Spring 中使用Quartz实现任务调度,Spring中使用Quartz 有两种方式,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • springboot自定义日志注解的实现

    springboot自定义日志注解的实现

    本文主要介绍了springboot自定义日志注解的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • MybatisPlus使用代码生成器遇到的小问题(推荐)

    MybatisPlus使用代码生成器遇到的小问题(推荐)

    这篇文章主要介绍了MybatisPlus使用代码生成器遇到的小问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 关于maven本地仓库的配置方式

    关于maven本地仓库的配置方式

    这篇文章主要介绍了关于maven本地仓库的配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • java利用easyexcel实现导入与导出功能

    java利用easyexcel实现导入与导出功能

    这篇文章主要介绍了java利用easyexcel实现导入与导出功能,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-09-09
  • java中阻塞队列和非阻塞队列的实现

    java中阻塞队列和非阻塞队列的实现

    在Java并发编程中,阻塞队列和非阻塞队列是两种主要的队列类型,分别适用于不同的场景,了解这两种队列的特点和工作机制,可以帮助开发者更好地选择合适的数据结构解决并发问题
    2024-10-10
  • java模拟实现斗地主发牌小程序

    java模拟实现斗地主发牌小程序

    这篇文章主要为大家详细介绍了java模拟实现斗地主发牌小程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • 基于Rest的API解决方案(jersey与swagger集成)

    基于Rest的API解决方案(jersey与swagger集成)

    下面小编就为大家带来一篇基于Rest的API解决方案(jersey与swagger集成)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08

最新评论