设计模式七:用一个USB转换器的例子说清楚适配器模式


设计模式一: 《用一个营销策略的实例说清楚策略模式的应用场景》
设计模式二: 《用一个股票买卖的例子说清楚观察者模式》
设计模式三: 《用一个苏式面条的实例说清楚装饰者模式》
设计模式四: 《用一个生产手机的简单例子说清楚工厂模式》
设计模式五: 《用不同的实现方式创建单例模式》
设计模式六: 《用一个遥控开关的例子说清楚命令模式》

一、 背景

  • 适配器模式是一个比较好理解的设计模式:其核心思想就是创建一个适配器对象(考虑到JAVA没有多重继承的特性,我们这里只介绍对象适配器),把一个接口转换成另外一个接口,使得原本由于接口不兼容的对象能一起工作。
  • 我们举实际生活中的一个USB转换器(Apple USB-C 至 USB 转换器)的例子来说明

二、 USB适配器

  • 在MacBook上已经拥有了一个USB-C接口
    在这里插入图片描述
/**
 * MacBook USB-C接口
 */
public interface USB_C {

    // 该接口可以直接连接USB-C设备
    void connect();
}
  • 我们手上有个USB-A的设备,希望能连接到MacBook上
    在这里插入图片描述
/**
 * USB-A
 */
public interface USB_A {

    void connect();
}

/**
 * USB-A设备
 */
public class USB_A_Connection implements USB_A {
    @Override
    public void connect() {
        System.out.println("USB-A设备进行连接");
    }
}

  • 这时候我们需要借用一个USB适配器,把USB-A转成USB-C的接口,让MacBook可以连上USB-A设备
    在这里插入图片描述
/**
 * USB-C转USB-A适配器
 */
public class USBAdapter  implements USB_C {

    private USB_A usbA;

    public USBAdapter(USB_A usbA) {
        this.usbA = usbA;
    }

    @Override
    public void connect(){
        System.out.println("插入USB-C转USB-A适配器");
        usbA.connect();
    }

}
  • 最后,我们把U盘插到USB适配器上完成连接
/**
 * 把USB-A设备插入适配器
 */
public class Main {

    public static void main(String[] args) {

        // U盘
        USB_A usbA = new USB_A_Connection();
        // 插上适配器
        USBAdapter usbAdapter = new USBAdapter(usbA);
        // U盘与适配器连接
        usbAdapter.connect();

    }
}

在这里插入图片描述

三、总结

  • 让我们回顾一下以上转换器例子的UML图
  1. USB_C称为目标接口
  2. USB_A_Connection称为被适配者或源接口角色
  3. USBAdapter就是适配器,它的作用就是将被适配者的源接口转化为目标接口
    在这里插入图片描述
  • 主要优点:
    使用适配器模式,程序员不需要修改原有代码而实现重用。

  • 主要缺点:
    过多使用适配器会导致系统凌乱,且实现过程比较复杂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

智慧zhuhuix

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

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

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

打赏作者

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

抵扣说明:

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

余额充值