结构型:适配器模式

目录

1、核心思想

2、实现方式

2.1 类适配器(继承实现,专属适配器)

2.1.1 模式结构

2.1.2 实现案例

2.2 对象适配器(组合实现,通用适配器)

2.2.1 模式结构

2.2.2 实现案例

3、优缺点分析

4、适用场景


1、核心思想

目的:解决接口不兼容问题,通过接口转换的方式,使原本无法协同工作的类能够一起工作,达到解耦效果。

概念:当一个对象或类的接口不能匹配用户所期待的接口时,适配器就充当中间转换的角色,以达到兼容用户接口的目的,同时适配器也实现了客户端与接口的解耦,提高了组件的可复用性。

举例

1> 跨语言沟通:必须找个会两种语言的翻译,将接口转换才能使沟通进行下去,我们将翻译这个角色称为适配器

2> 电源适配器:将220V电压转换为手机所需的5V

3> USB转Type-C转换器:连接不同接口的设备

2、实现方式

2.1 类适配器(继承实现,专属适配器)

2.1.1 模式结构

结构:适配器继承被适配者(Adaptee)并实现目标接口(Target)

特点:直接复用被适配者的方法,但受限于单继承

三个核心角色:

  • Target(目标接口)​:客户端要使用的目标接口标准
  • Adaptee(被适配者)​:被适配者的类实现,目前不能兼容目标接口的问题类
  • Adapter(适配器)​:继承自被适配者类且实现了目标接口,负责适配(转换)被适配者的接口specificRequest()为目标接口request()

2.1.2 实现案例

// 目标接口(Target)
interface USB {
    void connect();
}

// 被适配者(Adaptee)
class TypeC {
    public void typeCConnect() {
        System.out.println("Type-C connected.");
    }
}

// 类适配器(继承TypeC,实现USB)
class Adapter extends TypeC implements USB {
    @Override
    public void connect() {
        typeCConnect(); // 调用父类方法
    }
}

// 客户端
class Client {
    public static void main(String[] args) {
        TypeC typec = new Adapter();
        typec.connect();
    }
}

2.2 对象适配器(组合实现,通用适配器)

2.2.1 模式结构

结构:适配器持有被适配者的实例,通过组合实现接口转换。

特点:更灵活,支持多个被适配者,符合“合成复用原则”。

三个核心角色:

  • Target(目标接口)​:客户端要使用的目标接口标准
  • Adaptee(被适配者)​:被适配者的接口标准,目前不能兼容目标接口的问题接口,可以有多种实现类
  • Adapter(适配器)​:实现了目标接口,负责适配(转换)被适配者的接口specificRequest()为目标接口request()

2.2.2 实现案例

// 目标接口(Target)
interface USB {
    void connect();
}

// 被适配者(Adaptee)
interface TypeC {
    void typeCConnect();
}

// 适配器(Adapter)
class Adapter implements USB {
    private TypeC typeC;

    public Adapter(TypeC typeC) {
        this.typeC = typeC;
    }

    @Override
    public void connect() {
        typeC.typeCConnect(); // 调用被适配对象的方法
    }
}

// 客户端
class Client {
    public static void main(String[] args) {
        TypeC typec = new TypeCImpl();//TypeC的实现类
        USB usb = new Adapter(typec);
        usb.connect();
    }
}

3、优缺点分析

优点缺点
提高代码复用性(无需修改原有代码)增加代码复杂度(需新增适配器类)
灵活支持多适配者(对象适配器)过度使用可能导致系统结构混乱
符合开闭原则(通过扩展而非修改)

4、适用场景

  • 整合第三方库

    • 当需要引入外部库但接口与现有系统不匹配时,通过适配器封装其接口。

  • 系统升级过渡

    • 新旧模块共存时,用适配器让旧代码兼容新接口,避免大规模重构。

  • 统一多个类的接口

    • 例如,系统需要支持多种日志框架(如Log4j、SLF4J),通过适配器统一日志接口。

  • 框架中的典型案例

    • Java I/OInputStreamReader适配字节流到字符流。

    • Android RecyclerViewAdapter将数据绑定到列表视图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值