当前位置: 首页 > news >正文

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

一、适配器模式的定义

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

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

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


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

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

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

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

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

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

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

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

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

// 适配器类
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(中国插头)

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

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

// 测试类
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.lryc.cn/news/499656.html

相关文章:

  • 基于Java Springboot在线招聘APP且微信小程序
  • 多组学数据如何发表高分SCI论文,以RNA-Seq数据为例
  • Qt Designer Ui设计 功能增加
  • 【Android学习】2024最新版Android Studio安装与配置
  • RabbitMQ延时队列
  • a8204 基于微信小程序的音乐播放器微信小程序的研究与实现 服务器端Java+Mysql+Servlet 文档 源码
  • 游戏新纪元:用栈记录数据,轻松实现悔棋功能
  • C/C++基础知识复习(36)
  • JAVA |日常开发中连接Sqlite数据库详解
  • Java项目实战II基于微信小程序的消防隐患在线举报系统(开发文档+数据库+源码)
  • python编程Day12-属性和方法的分类
  • 【unity小技巧】在 Unity 中,Application获取各种文件路径或访问不同类型的存储路径
  • c++:timer
  • VSCode(四)CMake调试
  • 安装Docker并使用WSL
  • HCIA-openGauss_2_2连接与认证
  • 安装 pytorch lighting
  • 2024年12月7日历史上的今天大事件早读
  • ORB-SLAM2 ---- 非线性优化在SLAM中的应用(一)
  • FastAPI中创建一个多App架构
  • 计算机网络原理之HTTP与HTTPS
  • 完全按照手册win10里装Ubuntu 虚拟机然后编译ESP32(主要是想针对ESP32C3和S3)开发板的鸿蒙系统(失败)
  • vsphere vcenter web 界面的介绍
  • 【pyspark学习从入门到精通23】机器学习库_6
  • FPGA实战篇(呼吸灯实验)
  • 面经自测——自我介绍
  • 在 LS-DYNA 中将应力转换为用户定义的坐标系
  • 【Spark】 groupByKey与reduceByKey的区别
  • 数据库与数据库管理系统概述
  • (简单5步实现,免费且比GPT4.0更好用)部署本地AI大语言模型聊天系统:Chatbox AI + 马斯克grok2.0大模型