【一天一个设计模式】—— 适配器模式 (Adapter Pattern)

本文探讨了适配器模式如何将一个类的接口转换为客户端所需的接口,以便解决接口不兼容问题,提升复用性,并通过代码实例说明其实现原理。适配器模式适用于扩展应用和接口改造场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.
将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

从定义可知,适配器模式的作用就是适配两个互不匹配的接口,从而使类与类之间能相互交流。

该模式解决的问题: 1、现有的类的接口不符合系统的需要,需要进行改造。 2、需要一个可重用的类来用于一些和它没有太大关联的类,其不一定有一致的接口。

UML图
在这里插入图片描述
从UML图中可知,适配器模式由3部分组成:

1. Target目标角色 :该角色定义把其他类转换为何种接口,也就是我们期望的适配接口。
2. Adaptee源角色 :即要被适配器包装的角色,该角色原来的接口无法与目标角色沟通。
3. Adapter适配器角色 :适配器角色将源角色转换为目标角色,通过继承或关联的方式。


通过代码来看一下适配器模式的思想。

假如你天马行空,想让一辆汽车既能在公路上行驶,又能像飞机一样在天上飞行,但是汽车的接口和飞机的接口并不兼容,于是你搞了个适配器,使得汽车可以适配飞机的飞行功能。

1.创建飞机接口

public interface Plane{
    void fly();
}

2.创建汽车接口

public interface Car{
    void drive();
}

3.创建汽车接口的实现类

public class BYD implements Car{
    @Override
    public void drive() {
        System.out.println("BYD drive");
    }
}

4.创建适配器

public class CarAdapter implements Plane {

    private Car car;

    public TurkeyAdapter(Car car) {
        this.car = car;
    }
	
    @Override
    public void fly() {
        car.drive();
    }
}

5.测试

public class Test{
    public static void main(String[] args) {
        Car car = new BYD();
        Plane plane = new CarAdapter(car);
        plane.fly();
    }
}

上述代码的关键就是适配器继承或依赖已有的对象,实现想要的目标接口。


总结:

1.优点:

1、可以让两个关联不大的类相兼容。 2、提高了类的复用性。

缺点:

1、过多地使用适配器不是一个好选择,系统会非常零乱。
2、一个类只能适配一个适配者类,而且目标类必须是抽象类。

详细设计阶段不要考虑使用适配器模式,使用主要场景为扩展应用中。其使用场景为在一个系统中加入额外的类,使类与系统相兼容;修改接口时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Uranus^

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

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

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

打赏作者

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

抵扣说明:

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

余额充值