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

embedded/2025/2/7 3:51:36/

一、适配器模式的定义

        适配器模式(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;}// 适配器实现目标接口的充电方法@Overridepublic void chargeInUS() {System.out.println("正在适配...");cnPlug.chargeInCN();  // 调用中国插头的充电方法}
}

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

java">// 中国插头实现
public class ChinaPlug implements CNPlug {@Overridepublic 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.缺点:

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

六、总结

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


http://www.ppmy.cn/embedded/144186.html

相关文章

多模态大型语言模型MM-1.5采用数据驱动的方法,通过不断优化数据组合提高模型性能

多模态大型语言模型MM-1.5采用数据驱动的方法,通过不断优化数据组合提高模型性能 MM-1.5模型的设计核心在于其数据驱动的方法,这意味着模型的性能在很大程度上取决于所使用的数据类型和组合。这种方法的实施细节可以从以下几个方面来展开: …

Scala的正则表达式

应用场景 1.找到符合要求的子串 2.判断给的字符串是否符合要求 例如,在网站上注册用户,用户名的格式有要求!

【JavaWeb后端学习笔记】Spring事务管理

Spring事务管理 1、事务管理2、事务管理使用场景3、Transactional注解属性3.1 rollbackFor3.2 propagation 1、事务管理 事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么…

专升本计算机——计算机基础知识测试

一、选择题 1.关于计算机的发展及基本知识,不正确的是 ( )。 A.计算机正朝着多极化的方向发展。 B.从计算机诞生至今,计算机所采用的电子器件依次是:电子管、晶体管、中小规模集成电路和大、超大规模集成电路。 C.世界上第一台电子计算机…

2个GitHub上最近比较火的Java开源项目

1. SpringBlade 微服务架构 标题 SpringBlade 微服务架构 摘要 SpringBlade 是一个由商业级项目升级优化而来的微服务架构,采用Spring Boot 3.2、Spring Cloud 2023等核心技术构建,遵循阿里巴巴编码规范,提供基于React和Vue的两个前端框架&am…

十五、全局搜索正则表达式

一.grep简介 grep 全程Globally search a Regular Expression and Print,是一种强大的文本搜索工具,它能使用特 定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。Unix的grep家族包括grep和egrep 二.grep的工作…

第七章续版,mapper.xml,这是重点,一对多,一对一,动态SQL,foreach...

mapper,mapper.xml 1.单表查询 <select id"接口名" parameterType"参数类型&#xff0c;单个参数时写对应类型&#xff0c;两个及以上用Map" resultType"返回值类型&#xff0c;查询必须写">这里写SQL语句 </select> Map时测试类写…

【QT】:QT(介绍、下载安装、认识 QT Creator)

背景 &#x1f680; 在我们的互联网中的核心岗位主要有以下几种 开发&#xff08;程序员&#xff09;测试运维&#xff08;管理机器&#xff09;产品经理&#xff08;非技术岗位&#xff0c;提出需求&#xff09; 而我们这里主要关注的是开发方向&#xff0c;开发岗位又分很…