16 设计模式之适配器模式(充电器转换案例)

一、适配器模式的定义

适配器模式(Adapter Pattern)是一种结构型设计模式,常用于解决接口不兼容的问题。适配器模式通过引入一个"适配器"类,将一个接口转化为客户端期望的另一种接口,使得原本因接口不兼容而无法交互的类能够正常协作。

适配器模式的目标是让原本不兼容的接口能够一起工作。具体来说,适配器模式通过"适配器类"将源接口(被适配的接口)转换成客户端期望的目标接口,从而使得客户端与源接口可以互相沟通。

今天我们通过一个生活化的例子来讲解适配器模式:假设你有一个中国标准的电器插头,但你在美国旅行时,电源插座与中国的插头不兼容。此时,我们就可以通过适配器模式来解决这一问题,使得电器插头能够适配到美国标准的电源插座上。


二、适配器模式的组成部分

  • 目标接口(Target) :客户端希望使用的标准接口。在我们的例子中,就是美国的电源插头接口 USPlug
  • 被适配者(Adaptee) :现有的接口,它与客户端希望使用的接口不兼容。在例子中就是中国电源插头接口 CNPlug
  • 适配器(Adapter) :实现目标接口,并持有被适配者对象。适配器将目标接口的请求转发到被适配者对象,实现接口之间的适配。这里就是 PlugAdapter 类。
  • 客户端(Client) :使用目标接口与系统进行交互。在本例中,就是用美国插头(USPlug)为电器充电的行为。

三、适配器模式的案例讲解

我们来看一个具体的代码实现,以电源插头适配为例:

1.目标接口:USPlug(美国插头接口)

java 复制代码
// 目标接口
public interface USPlug {
    void chargeInUS();  // 美国标准的充电方法
}

2.被适配者接口:CNPlug(中国插头接口)

java 复制代码
// 被适配者接口
public interface CNPlug {
    void chargeInCN();  // 中国标准的充电方法
}

3.适配器类:PlugAdapter(适配器)

java 复制代码
// 适配器类
public class PlugAdapter implements USPlug {
    private CNPlug cnPlug;  // 持有一个中国插头对象

    // 构造函数,传入中国插头对象
    public PlugAdapter(CNPlug cnPlug) {
        this.cnPlug = cnPlug;
    }

    // 适配器实现目标接口的充电方法
    @Override
    public void chargeInUS() {
        System.out.println("正在适配...");
        cnPlug.chargeInCN();  // 调用中国插头的充电方法
    }
}

4.被适配者实现类:ChinaPlug(中国插头)

java 复制代码
// 中国插头实现
public class ChinaPlug implements CNPlug {
    @Override
    public void chargeInCN() {
        System.out.println("使用中国插头充电...");
    }
}

5.测试类:AdapterPatternTest(客户端)

java 复制代码
// 测试类
public class AdapterPatternTest {
    public static void main(String[] args) {
        // 客户端使用中国插头的电器
        CNPlug cnPlug = new ChinaPlug();

        // 通过适配器将中国插头转换为美国插头
        USPlug usPlug = new PlugAdapter(cnPlug);

        // 使用美国插头接口充电
        usPlug.chargeInUS();
    }
}

6.实现效果

正在适配...

使用中国插头充电


四、代码执行流程

  1. 客户端 AdapterPatternTest 创建了一个 ChinaPlug(中国插头)实例。
  2. 通过 PlugAdapter(适配器)将 ChinaPlug 转换为 USPlug(美国插头接口)。
  3. 客户端通过 usPlug.chargeInUS() 方法来充电,实际执行的是 ChinaPlugchargeInCN() 方法。
  4. 适配器类(PlugAdapter)的作用就是将不同的接口适配起来,让原本不兼容的插头能够在美国插座中使用。

五、适配器模式的优缺点

1.优点:

  • 解决接口不兼容问题:适配器模式能让两个不兼容的接口能够正常工作,避免了因为接口不一致而导致的系统无法协作的问题。
  • 提高系统的灵活性:通过适配器,可以灵活地引入新的插头类型,而不需要修改现有的代码。
  • 符合开闭原则:通过扩展适配器类可以方便地适应新类型的插头或接口,而无需修改原有的类。

2.缺点:

  • 可能增加系统的复杂性:过多的适配器可能导致类的数量增多,从而增加系统的复杂性。
  • 增加了代码的间接性:通过适配器进行间接调用,会使得代码的可读性降低,增加了理解成本。

六、总结

适配器模式是解决接口不兼容问题的强大工具。通过引入适配器类,系统中的各个部分可以不修改原有代码的前提下,实现接口之间的兼容和转换。在实际开发中,适配器模式非常适用于跨平台和系统集成的场景。希望通过本篇博客的示例,你能够清晰理解适配器模式的工作原理及应用场景。

相关推荐
创码小奇客几秒前
MongoDB:数据库界的 “狂野西部牛仔”
java·mongodb·trae
森焱森4 分钟前
单片机FreeRTOSTickless低功耗模式应用示例
c语言·网络·单片机·算法·架构
cheryl886 分钟前
Python+Requests 企业级接口测试入门(1~3天)
开发语言·python
Spring-wind10 分钟前
【golang】为什么协程开销小于线程
java·开发语言·golang
sml259(劳改版)12 分钟前
(PTA) L2-011-L2-015
数据结构·算法
Yang-Never16 分钟前
Open GL ES -> SurfaceView + 自定义EGL实现OpenGL渲染框架
android·开发语言·图像处理·android studio
wjs202423 分钟前
Perl 发送邮件
开发语言
阿里云大数据AI技术38 分钟前
阿里云 AI 搜索开放平台:从算法到业务——AI 搜索驱动企业智能化升级
大数据·人工智能·算法
隔壁小查1 小时前
【后端开发】Spring MVC-常见使用、Cookie、Session
java·spring·mvc
呦呦鹿鸣Rzh1 小时前
SpringMVC的请求-文件上传
java·前端·html