JAVA结构性模式 -- 适配器模式你会用几种 ?

一、引言

  2022.8.27 小雨,阴天,不能出去玩 ,不开心~

 

二、什么是适配器模式 ?

      别名为包装器,将某个类的接口转换成客户端期望的另一个接口表示,主要的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。

主要分为三大类:类适配器模式 、 对象适配器模式 、接口适配器模式

三、UML图

 

  • 被适配者角色(Adaptee): 对应的就是网线接口,被适配的角色
  • 适配者角色(Adapter):对应的就是接口转换器,通过转换器把网线接口转换成USB接口
  • 目标角色(Target):对应的就是USB接口,目标角色。

四、适用场景

  • 系统需要使用一些现有的类,而这些类的接口(方法)不符合系统的需要,甚至没有这些类的源代码。
  • 想要使用一个已经存在的类,但是它却不符合现有的接口规范,导致无法直接去访问,这时创建一个适配器就能间接去访问这个类中的方法

五、类适配器模式 

案例: 就比如我现在有钱了,买了一台mac电脑,我想连接网线上网,可是呢,我的mac是USB接口的,网线是网线接口的,这个时候就需要接口转换器来进行适配。(可参考上面UML图)

代码实现:

1.需要适配的类

/**
 * @Author WangYan
 * @Date 2022/8/27 15:18
 * @Version 1.0
 * 被适配的类 : 网线
 */
public class Cable {

    public void sw(){
        System.out.println("开始上网了!");
    }
}

2.适配的抽象类

/**
 * @Author WangYan
 * @Date 2022/8/27 15:22
 * @Version 1.0
 * 适配器抽象类
 */
public interface Adapter {

    void adapterWx();
}
/**
 * @Author WangYan
 * @Date 2022/8/27 15:25
 * @Version 1.0
 * 具体的适配实现
 */
public class AdapterImpl extends Cable implements Adapter {
    @Override
    public void adapterWx() {
        super.sw();
    }
}

3.目标角色

/**
 * @Author WangYan
 * @Date 2022/8/27 15:21
 * @Version 1.0
 * 电脑
 */
public class Computer {

    /**
     * 电脑开始上网
     * @param net
     */
    public void lj(AdapterImpl net){
        net.adapterWx();
    }
}

4.客户端调用

/**
 * @Author WangYan
 * @Date 2022/8/27 16:23
 * @Version 1.0
 * Test 测试
 */
public class Test {
    public static void main(String[] args) {
        Computer computer = new Computer(); // 电脑
        Cable cable = new Cable(); // 网线
        AdapterImpl adapter = new AdapterImpl(); // 转换器
        computer.lj(adapter);
    }
}

五、对象适配器模式

对象适配器和类适配器的区别主要是在适配器实现的时候,类是单继承的方式,对象是组合

/**
 * @Author WangYan
 * @Date 2022/8/27 15:25
 * @Version 1.0
 * 适配器的具体实现
 */
public class AdapterImpl implements Adapter {

    private Cable cable;

    public AdapterImpl(Cable cable) {
        this.cable = cable;
    }

    @Override
    public void adapterWx() {
        cable.sw();
    }
}

总结:

类适配器:采用单继承

对象适配器:采用聚合组合,这种在项目中比较常用

接口适配器:使用抽象类进行接口默认实现,子类有选择的进行覆盖实现

适配器模式最大的作用就是将原本不兼容的接口融合在一起工作,在实际开发中可根据实际情况来选择。

 拜拜~

有任何问题欢迎大家指出~

Thank You !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逸航不吃瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值