java设计模式之浅谈适配器模式

 更新时间:2021年06月06日 14:53:58   作者:RYGAR  
我们现实生活中的适配器不少.例如,我们使用存储卡适配器连接存储卡和一个计算机,因为计算机仅支持一种类型的存储卡和我们的卡不与计算机兼容,适配器是两种不相容的实体之间的转换器,适配器模式是一种结构模式.本文就带大家了解一下java适配器模式,需要的朋友可以参考下

一、结构型模式

结构型模式有什么好处?
从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题

二、适配器模式

USB网线转换器

在这里插入图片描述

三、什么是适配器模式?

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本接口不兼容而不能一起工作的那些类能够变得在一起工作!

四、角色分析

目标接口:客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口
需要适配的类:需要适配的类或适配者类
适配器:通过包装一个需要适配的对象,把原接口转换成目标对象!
例子:

适配的类:网线

package com.jialidun.gof.adapter;

//要被适配的类:网线
public class Adaptee {

    public void request(){
        System.out.println("连接网线上网!");
    }
}

接口转换器的抽象方法

package com.jialidun.gof.adapter;

//接口转换器的抽象实现
public interface NetToUsb {

    //作用:处理请求 网线插到USB上
    public void hanleRequest();

}

真正的适配器,需要连接USB,连接网线

package com.jialidun.gof.adapter;

//真正的适配器,需要连接USB,连接网线
//方式1 继承(类适配器、单继承)
public class Adapter extends Adaptee implements NetToUsb{


    @Override
    public void hanleRequest() {
        super.request();//可以上网了
    }
}

创建客户端,需要上网,网线不匹配

package com.jialidun.gof.adapter;

//客户端类:想上网,插不上网线
public class Computer {

    //我们的电脑需要连接上转接器才可以上网
    public void net(NetToUsb adapter){
        //上网的具体实现,找一个转接头

        adapter.hanleRequest();

    }

    public static void main(String[] args) {
        //电脑  适配器  网线
        Computer computer = new Computer();//电脑
        Adaptee adaptee = new Adaptee();//网线
        Adapter adapter = new Adapter();//转接器

        computer.net(adapter);



    }
}

上面的例子有局限性,尽量不使用继承,修改方法

修改适配器

package com.jialidun.gof.adapter;

//方式2  组合(对象适配器、常用)
public class Adaapter2 implements NetToUsb{
    private Adaptee adaptee;

    public Adaapter2(Adaptee adaptee){
        this.adaptee = adaptee;
    }


    @Override
    public void hanleRequest() {
        adaptee.request();
    }
}

客户端

package com.jialidun.gof.adapter;

//客户端类:想上网,插不上网线
public class Computer {

    //我们的电脑需要连接上转接器才可以上网
    public void net(NetToUsb adapter){
        //上网的具体实现,找一个转接头

        adapter.hanleRequest();

    }

    public static void main(String[] args) {
        //电脑  适配器  网线
//        Computer computer = new Computer();//电脑
//        Adaptee adaptee = new Adaptee();//网线
//        Adapter adapter = new Adapter();//转接器
//
//        computer.net(adapter);


        Computer computer = new Computer();//电脑
        Adaptee adaptee = new Adaptee();//网线
        Adaapter2 adaapter2 = new Adaapter2(adaptee);
        adaapter2.hanleRequest();



    }
}

在这里插入图片描述

五、对象适配器有哪些优点

1.一个对象适配器可以把多个不同的适配者适配到同一个目标。

2.可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据"里氏替换原则",适配者的子类也可通过该适配器进行适配。

六、类适配器缺点

对于Java、C#等不支持多重类继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者;
在Java、C#等语言中,类适配器模式中的目标抽象类只能为接口,不能为类,其使用有一定的局限性。

七、使用场景

系统需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需求,甚至没有这些类的源代码。
想创建一个重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
例如SpringMVC中DispacherServlet、HandlerAdpter等

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

相关文章

  • Spring mvc服务端数据校验实现流程详解

    Spring mvc服务端数据校验实现流程详解

    这篇文章主要介绍了Spring mvc服务端数据校验实现流程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 如何在spring事务提交之后进行异步操作

    如何在spring事务提交之后进行异步操作

    这篇文章主要为大家介绍了如何在spring事务提交之后进行异步操作,这些异步操作必须得在该事务成功提交后才执行,回滚则不执行,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2023-09-09
  • SpringMVC前后端参数映射

    SpringMVC前后端参数映射

    在web开发中我们都要进行前端传参后端取参的过程,本文主要介绍了SpringMVC前后端参数映射,针对GET, POST, PUT, DELETE 请求的参数该如何映射,感兴趣的可以了解一下
    2023-08-08
  • Java从控制台接受输入字符的简单方法

    Java从控制台接受输入字符的简单方法

    这篇文章主要介绍了Java从控制台接受输入字符的简单方法,需要的朋友可以参考下
    2014-02-02
  • 浅谈Maven安装及环境配置出错的解决办法

    浅谈Maven安装及环境配置出错的解决办法

    这篇文章主要介绍了浅谈Maven安装及环境配置出错的解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Java 添加文本框到PPT幻灯片过程解析

    Java 添加文本框到PPT幻灯片过程解析

    这篇文章主要介绍了Java 添加文本框到PPT幻灯片过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 剑指Offer之Java算法习题精讲二叉树的构造和遍历

    剑指Offer之Java算法习题精讲二叉树的构造和遍历

    跟着思路走,之后从简单题入手,反复去看,做过之后可能会忘记,之后再做一次,记不住就反复做,反复寻求思路和规律,慢慢积累就会发现质的变化
    2022-03-03
  • 如何基于java随机获取不重复数值

    如何基于java随机获取不重复数值

    这篇文章主要介绍了如何基于java随机获取不重复数值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Maven打包jar(lib目录分离和不分离)的两种方式

    Maven打包jar(lib目录分离和不分离)的两种方式

    打包jar的方式有很多种,本文主要介绍了Maven打包jar的两种方式,包含lib目录分离和不分离,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • 解决Java中new BigDecimal()的坑

    解决Java中new BigDecimal()的坑

    这篇文章主要介绍了解决Java中new BigDecimal()的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06

最新评论