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适配器模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java NIO三大组件与ByteBuffer深入理解及使用

    Java NIO三大组件与ByteBuffer深入理解及使用

    这篇文章主要介绍了Java NIO三大组件与ByteBuffer,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • SpringBoot中@Insert、@Update实现批量新增更新的使用示例

    SpringBoot中@Insert、@Update实现批量新增更新的使用示例

    本文主要介绍了SpringBoot中@Insert、@Update实现批量新增更新的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-10-10
  • Java实现MD5消息摘要算法

    Java实现MD5消息摘要算法

    本篇文章主要介绍了Java实现MD5消息摘要算法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Java如何利用Mybatis进行数据权限控制详解

    Java如何利用Mybatis进行数据权限控制详解

    这篇文章主要介绍了Java如何利用Mybatis进行数据权限控制详解,数据权限控制最终的效果是会要求在同一个数据请求方法中,根据不同的权限返回不同的数据集,而且无需并且不能由研发编码控制。,需要的朋友可以参考下
    2019-06-06
  • MyBatis如何实现流式查询的示例代码

    MyBatis如何实现流式查询的示例代码

    这篇文章主要介绍了MyBatis 如何实现流式查询的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 解决idea找不到或无法加载主类的错误处理

    解决idea找不到或无法加载主类的错误处理

    这篇文章主要介绍了解决idea找不到或无法加载主类的错误处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 实例分析java中重载与重写的区别

    实例分析java中重载与重写的区别

    这篇文章主要介绍了实例分析java中重载与重写的区别,需要的朋友可以参考下
    2014-07-07
  • Java灵活使用枚举表示一组字符串的操作

    Java灵活使用枚举表示一组字符串的操作

    这篇文章主要介绍了Java灵活使用枚举表示一组字符串的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • java web实现分页查询实例方法

    java web实现分页查询实例方法

    在本篇文章里我们给大家分享了java web实现分页查询的详细方法知识点,有需要的朋友们参考学习下。
    2018-10-10
  • spring项目中切面及AOP的使用方法

    spring项目中切面及AOP的使用方法

    我们知道,spring两大核心,IOC(控制反转)和AOP(切面),那为什么要使用AOP,AOP是什么呢?带着这些问题通过本文学习下吧
    2021-06-06

最新评论