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

23种设计模式-适配器(Adapter)设计模式

适配器设计模式

  • 🚩什么是适配器设计模式?
  • 🚩适配器设计模式的特点
  • 🚩适配器设计模式的结构
  • 🚩适配器设计模式的优缺点
  • 🚩适配器设计模式的Java实现
  • 🚩代码总结
  • 🚩总结

🚩什么是适配器设计模式?

适配器模式(Adapter Pattern)结构型设计模式,它允许 不兼容的接口 之间进行 协作。适配器模式通过 包装 一个类的接口,使其能够与另一个接口兼容。

使用场景

  • 需要 将现有类与不兼容的接口 进行协作时。

  • 需要 复用现有类,但其接口不符合需求时。

  • 需要 统一多个类的接口,以便客户端可以一致地使用它们。

🚩适配器设计模式的特点

  • 接口转换:适配器模式可以将一个类的接口转换成客户端期望的另一个接口。

  • 透明性:客户端通过适配器与目标接口交互,无需知道适配器的存在。

  • 复用性:适配器模式可以复用现有的类,而无需修改其代码。

  • 灵活性:适配器模式可以灵活地处理不同接口之间的差异。

🚩适配器设计模式的结构

适配器模式主要包含以下部分:

  • Target(目标接口):客户端期望的接口,适配器需要实现该接口。

  • Adaptee(被适配者):需要被适配的类,其接口与目标接口不兼容。

  • Adapter(适配器):通过包装 Adaptee,将其接口转换为 Target 接口。

  • Client(客户端):通过 Target 接口与适配器交互。

图例:

在这里插入图片描述

🚩适配器设计模式的优缺点

✅ 优点

  • 接口兼容:适配器模式可以使不兼容的接口之间进行协作。

  • 复用性:可以复用现有的类,而无需修改其代码。

  • 灵活性:适配器模式可以灵活地处理不同接口之间的差异。

❌ 缺点

  • 增加复杂性:引入适配器会增加系统的复杂性,尤其是在有多个适配器时。

  • 性能开销:适配器模式可能会引入额外的性能开销,尤其是在频繁调用时。

🚩适配器设计模式的Java实现

代码地址:GitHub

  • 创建目标接口 USB,定义客户端期望的方法Request()
/**
 * @author hanson.huang
 * @version V1.0
 * @ClassName USB
 * @Description 目标接口
 * @date 2025/3/24 10:09
 **/
public class USB {
    public void Request() {
        System.out.println("USB数据线");
    }
}
  • 创建被适配者 TypeC,定义其特有的方法 SpecificRequest()
/**
 * @author hanson.huang
 * @version V1.0
 * @ClassName TypeC
 * @Description 被适配者 TypeC
 * @date 2025/3/24 10:10
 **/
public class TypeC {
    public void SpecificRequest() {
        System.out.println("Type-C数据线");
    }
}
  • 创建适配器 Adapter,继承 USB 并包装 TypeC,将 SpecificRequest() 转换为 Request()
/**
 * @author hanson.huang
 * @version V1.0
 * @ClassName Adapter
 * @Description 适配器 Adapter
 * @date 2025/3/24 10:10
 **/
public class Adapter extends USB {
    private TypeC typeC = new TypeC();

    @Override
    public void Request() {
        typeC.SpecificRequest();
    }
}
  • 创建客户端,测试适配器模式
/**
 * @author hanson.huang
 * @version V1.0
 * @ClassName AdapterPattern
 * @Description 测试适配器模式
 * @date 2025/3/24 10:13
 **/
public class AdapterPattern {
    public static void main(String[] args) {
        USB usb = new Adapter();
        usb.Request();
    }
}

📌 运行结果

在这里插入图片描述

🚩代码总结

  • 目标接口 USB 定义客户端期望的方法 Request()

  • 被适配者 TypeC 定义其特有的方法 SpecificRequest()

  • 适配器 Adapter 继承 USB 并包装 TypeC,将 SpecificRequest() 转换为 Request()

🚩总结

  • 适配器模式(Adapter Pattern) 允许 不兼容的接口 之间进行协作,通过 包装 一个类的接口,使其能够与另一个接口兼容。

  • 适用于 将现有类与不兼容的接口 进行协作、复用现有类统一多个类的接口 的场景。

  • Java 实现 需要 定义目标接口创建适配器包装被适配者,以实现接口转换。

✅ 适用场景:

  • 需要 将现有类与不兼容的接口 进行协作时。

  • 需要 复用现有类,但其接口不符合需求时。

  • 需要 统一多个类的接口,以便客户端可以一致地使用它们。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

在这里插入图片描述

相关文章:

  • 动态规划(10.地下城游戏)
  • vue3中,route4,获取当前页面路由的问题
  • Java面试黄金宝典14
  • 什么时候用到 JVM 调优,调优哪些参数
  • 数字图像处理 -- 霍夫曼编码(无损压缩)练习
  • 【区块链安全 | 第七篇】EVM概念详解
  • 排序--快排--非递归法
  • CSS3学习教程,从入门到精通,CSS3 元素的浮动与定位语法知识点及案例代码(17)
  • nuxt3 seo优化
  • WPF中的Adorner基础用法详解与实例
  • Java中清空集合列表元素有哪些方式
  • 【Elasticsearch基础】基本核心概念介绍
  • [python]基于yolov8实现热力图可视化支持图像视频和摄像头检测
  • kubernet在prometheus+alertmanager+grafana框架下新增部署loki模块
  • 【进阶】vscode 中使用 cmake 编译调试 C++ 工程
  • uni-app页面怎么设计更美观
  • 快速入手-基于Django-rest-framework的ModelSerializer模型序列化器(三)
  • 基于模糊PID算法的智能洗衣机控制器设计,实现洗衣过程智能化,能够监测衣物重量和污泥,实现洗涤时间、洗衣液投放的智能控制
  • 解析 ID 数组传参的解决方案:基于 Axios 的实现
  • leetcode40-组合总和II
  • 海南建设网站/网页制作教程步骤
  • 网站开发检测用户微信号/推广app有哪些
  • 游戏网站排行/av手机在线精品
  • 北京手机网站建设公司排名/郑州网络运营培训
  • 报社网站开发做什么/网络推广推广
  • 郑州市疫情防控指挥部电话号码/朝阳区seo