适配器模式

适配器模式

应用场景

系统运行过程中,需要增加新的功能点,这个功能点需要调用另外一个毫不相干的接口,但是两个类之间参数无法满足调用关系,再为了不修改原来接口的情况下,增加一个适配器进行转换调用,类似的例子比如 内存卡需要读卡器转成Usb接口后才能读取数据

优点

1 可以减少类的编写,不用重复的去实现某一个类的逻辑
2 可以根据不同的类型编写不同的适配器,比较灵活

缺点

  1. 适配器的引入会增加系统的复杂度,特别是类直接的调用关系会因为适配器的加入会引发代码调用的混乱

注意点

不要在系统上设计的使用使用适配器,系统设计时应避免将代码之间的调用复杂化,可以再系统运行时,需要额外的添加功能时进行

例子

下面以读卡器为适配器的例子来说明

定义一个Usb接口,用来读取usb

package com.example.demo.study.adapter;

/**
 * @Author zhanpeng
 * @Date 2023/5/30 8:12
 */

public interface Usb {

    void readUSBData();
}

定义一个upan类

package com.example.demo.study.adapter;

/**
 * @Author zhanpeng
 * @Date 2023/5/30 8:15
 */

public class Upan implements Usb{

    @Override
    public void readUSBData() {
        System.out.println("读取u盘中的数据");
    }

}

定义一个sdCard的接口接口,用来读取sd卡

package com.example.demo.study.adapter;

/**
 * @Author zhanpeng
 * @Date 2023/5/30 8:19
 */

public interface SdCardInterFace {

    void readSdCardData();

}

定义一个适配器,sd卡能读取u盘中的数据

package com.example.demo.study.adapter;

/**
 * @Author zhanpeng
 * @Date 2023/5/30 8:22
 */

public class CardReaderAdapter implements Usb, SdCardInterFace{

    private Usb usb = new Upan();

    @Override
    public void readUSBData() {
        usb.readUSBData();
    }

    @Override
    public void readSdCardData() {
        System.out.println("读取内存卡中的数据");
        readUSBData();
    }
}

测试代码进行测试

public class AdapterTest {

    //内存卡中需要读取u盘中的数据
    public static void main(String[] args) {
       SdCardInterFace sdCardInterFace = new CardReaderAdapter();
       sdCardInterFace.readSdCardData();
    }

}

运行结果

读取内存卡中的数据
读取u盘中的数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值