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.缺点:

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

六、总结

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

相关推荐
上理考研周导师28 分钟前
【单片机原理】第1章 微机基础知识,运算器,控制器,寄存器,微机工作过程,数制转换
算法
檀越剑指大厂34 分钟前
【Python系列】Python中的`any`函数:检查“至少有一个”条件满足
开发语言·python
I_Am_Me_1 小时前
【JavaEE初阶】线程安全问题
开发语言·python
IT猿手2 小时前
基于PWLCM混沌映射的麋鹿群优化算法(Elk herd optimizer,EHO)的多无人机协同路径规划,MATLAB代码
算法·elk·机器学习·matlab·无人机·聚类·强化学习
运维&陈同学2 小时前
【Elasticsearch05】企业级日志分析系统ELK之集群工作原理
运维·开发语言·后端·python·elasticsearch·自动化·jenkins·哈希算法
ZHOUPUYU3 小时前
最新 neo4j 5.26版本下载安装配置步骤【附安装包】
java·后端·jdk·nosql·数据库开发·neo4j·图形数据库
Q_19284999064 小时前
基于Spring Boot的找律师系统
java·spring boot·后端
ZVAyIVqt0UFji4 小时前
go-zero负载均衡实现原理
运维·开发语言·后端·golang·负载均衡
谢家小布柔5 小时前
Git图形界面以及idea中集合Git使用
java·git
loop lee5 小时前
Nginx - 负载均衡及其配置(Balance)
java·开发语言·github