Java设计模式中的适配器模式

 更新时间:2024年01月15日 09:25:47   作者:Mu_Mu是一只小白  
这篇文章主要介绍了Java设计模式中的适配器模式, 适配器模式是将一个类的接口适配成用户所期待的,一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中,需要的朋友可以参考下

适配器模式

将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。

使用场景:

1)系统需要使用现有的类,但现有的类却不兼容。

2)需要建立一个可以重复使用的类,用于一些彼此关系不大的类,并易于扩展,以便于面对将来会出现的类。

3)需要一个统一的输出接口,但是输入类型却不可预知。

角色:

  • Source:需要被适配的类、接口、对象,即Datas。
  • Destination:需要得到的类,Source通过适配得到的类对象,也就是我们期待得到的接口。
  • Adapter:适配器类,协调Source和Destination,使两者能够协同工作。

共有两类适配器模式:

  • 对象适配器模式: 在这种适配器模式中,适配器组合一个被适配类的实例。在这种情况下,适配器调用该实例方法并对方法进行适配
  • 类适配器模式: 这种适配器模式下,适配器继承需要自已适配的类。

模拟场景

家用电压为220v而手机充电器大概在5v,需要一个适配器去适配输入电压将220v变为5v。

类适配器模式

被适配的类

/**
 * @Description source类,需要被适配。
 */
public class AC220 {

    public int output220(){
       //输出220v电压
        return 220;
    }

}

目标类:

/**
 * @Description 目标类输出5v电压
 */
public interface OP5 {

      int output5v();
}

适配类:

public class PowerAdapter extends AC220 implements OP5{
    @Override
    public int output5v() {
        System.out.println("适配5v开始");
         int i = output220();
         return i/44;
    }
}

测试类:

  @Test
    public void testClassAdapt(){
        PowerAdapter powerAdapter = new PowerAdapter();
        System.out.println("适配后的输出:"+powerAdapter.output5v());
    }

测试结果

得到5v输入电压。

在这里插入图片描述

由于java是单继承,所以这种通过继承被适配类的方式不太灵活,而且继承会让适配器暴露出被适配类的方法。

对象适配器模式

只有适配器类不同

public class PowerAdapter2   implements OP5 {
    public PowerAdapter2(AC220 ac220) {
        this.ac220 = ac220;
    }

    private AC220 ac220;
    @Override
    public int output5v() {
        System.out.println("适配5v开始");
         int i = ac220.output220();
         return i/44;
    }
}

测试类:

  @Test
    public void testObjAdapt(){
        PowerAdapter2 powerAdapter = new PowerAdapter2(new AC220());
        System.out.println("适配后的输出:"+powerAdapter.output5v());
    }

测试结果

结果一致

在这里插入图片描述

这种模式和装饰者模式有点类似,但是装饰者是为了去扩展被装饰者的功能,并且使用者无法感觉到方法被装饰,适配器模式主要为了更好的兼容和扩展,使用者能感受到适配器的存在。

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

相关文章

  • 关于HttpClient 引发的线程太多导致FullGc的问题

    关于HttpClient 引发的线程太多导致FullGc的问题

    这篇文章主要介绍了关于HttpClient 引发的线程太多导致FullGc的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 超简单的java获取鼠标点击位置坐标的实例(鼠标在Jframe上的坐标)

    超简单的java获取鼠标点击位置坐标的实例(鼠标在Jframe上的坐标)

    在Java窗体Jframe上获取鼠标点击的坐标,其中使用了匿名内部类,实例代码非常简单易懂,大家可以学习一下
    2018-03-03
  • 自定义application.yml配置项方式

    自定义application.yml配置项方式

    这篇文章主要介绍了自定义application.yml配置项方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java关于JDK1.8中的Optional类

    Java关于JDK1.8中的Optional类

    本文主要介绍了Optional类的一些常用方法,以及其应用场景,其主要是为了规避空指针异常(NPE)。熟练的运用Optional类可以很大的简化我们的代码,使代码简洁明了。,需要的朋友可以参考下面文章内容
    2021-09-09
  • springboot添加多数据源的方法实例教程

    springboot添加多数据源的方法实例教程

    这篇文章主要给大家介绍了关于springboot添加多数据源方法的相关资料,在实际开发中经常可能遇到在一个应用中可能要访问多个数据库多的情况,需要的朋友可以参考下
    2023-09-09
  • java如何使用Lombok更优雅地编码

    java如何使用Lombok更优雅地编码

    Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。这样就省去了手动重建这些代码的麻烦,使代码看起来更简洁些。下面我们来详细学习下吧
    2019-06-06
  • Ubuntu快速安装eclipse

    Ubuntu快速安装eclipse

    这篇文章主要为大家详细介绍了Ubuntu快速安装eclipse的简单教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 关于Java跨域Json字符转类对象的方法示例

    关于Java跨域Json字符转类对象的方法示例

    这篇文章主要给大家介绍了关于Java跨域Json字符转类对象的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • Java Spring框架的注解式开发你了解吗

    Java Spring框架的注解式开发你了解吗

    这篇文章主要为大家详细介绍了Spring框架的注解式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • JUnit测试控制@Test执行顺序的三种方式小结

    JUnit测试控制@Test执行顺序的三种方式小结

    这篇文章主要介绍了JUnit测试控制@Test执行顺序的三种方式小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09

最新评论