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

设计模式之适配器模式

目录

  • 定义
  • 结构
  • 适用场景
  • 使用示例

定义

       适配器模式将一个类的接口转换成客户端期望的另一种接口,充当中间桥梁的角色。

结构

在这里插入图片描述
在这里插入图片描述

适用场景

      适配器模式适用于以下典型场景:
      1)‌复用遗留代码或第三方库‌
      当系统需集成现有类,但其接口不符合当前需求,且无法直接修改源码时。例如:整合旧系统功能模块到新框架中;调用第三方库时接口不兼容。
      2)‌统一多个类的接口‌
      需协调多个功能类似但接口不同的类,提供统一调用入口。例如:不同数据库驱动(如JDBC)通过适配器提供统一访问接口;封装多个零散功能类,提供标准化操作。
      3)‌兼容不同环境或设备硬件或协议转换场景。
      例如:读卡器适配多种存储卡格式;充电器转换插头规格(如三插转二插)。
      4)‌扩展系统灵活性‌
      为未来可能引入的不兼容类预留接口适配能力,避免频繁修改核心代码。

使用示例

这里以日志框架为例,来简单说明适配器模式的使用方式。
定义目标接口

/*** 目标接口(类似SLF4J的Logger接口)*/
public interface Logger {void log(String msg);}

定义被适配对象

/*** 被适配者A:Log4j实现*/
public class Log4jLogger {public void log4jLog(String msg) {System.out.println("[Log4j] " + msg);}}
/*** 被适配者B:JUL实现*/
public class JULLogger {public void julLog(String msg) {System.out.println("[JUL] " + msg);}}

定义适配器

/*** 适配器A:Log4j适配器* 对象适配器方式,如果是类适配器直接继承 Log4jLogger,调用super.log4jLog(msg)即可。*/
public class Log4jAdapter implements Logger{private final Log4jLogger log4j;public Log4jAdapter(Log4jLogger log4j) {this.log4j = log4j;}@Overridepublic void log(String msg) {log4j.log4jLog(msg);}
}
/*** 适配器B:JUL适配器* 类适配器*/
public class JULAdapter extends JULLogger implements Logger {@Overridepublic void log(String message) {super.julLog(message);}}

测试

public class Client {public static void main(String[] args) {Logger log = new Log4jAdapter(new Log4jLogger());log.log("通过对象适配器实现。");Logger log2 = new JULAdapter();log2.log("通过类适配器实现。");}}
http://www.lqws.cn/news/566533.html

相关文章:

  • OpenCV读取照片和可视化详解和代码示例
  • MySQL 安装使用教程
  • Java垃圾收集机制Test
  • PL-SLAM: Real-Time Monocular Visual SLAM with Points and Lines
  • Ai工具分享(2):Vscode+Cline无限免费的使用教程
  • XWPFDocument导出word文件
  • Linux中《动/静态库原理》
  • Redis缓存击穿深度解析:从现象到实战的完整解决方案
  • github上传代码步骤(http)
  • Cesium快速入门到精通系列教程十二:Cesium1.74中环绕地球生成​​经线环​​
  • Javaweb - 7 xml
  • 【智能协同云图库】智能协同云图库第三弹:基于腾讯云 COS 对象存储—开发图片模块
  • 日常 AI 工具汇总
  • Oracle 递归 + Decode + 分组函数实现复杂树形统计进阶(第二课)
  • 深入剖析 Linux 内核网络核心:sock.c 源码解析
  • 阿里云ACP-数据湖和机器学习
  • 解锁Ubuntu安装:从新手到高手的通关秘籍
  • Java 大视界 -- 基于 Java 的大数据分布式存储在科研大数据归档与长期保存中的应用(328)
  • 从UI设计到数字孪生实战演练:打造智慧交通的综合管理平台
  • 鸿蒙 Swiper 组件解析:轮播交互与动画效果全指南
  • 基于STM32的数字频率计设计
  • LoRA训练-理论基础
  • 大模型在恶性心律失常预测及治疗方案制定中的应用研究
  • 智慧水务:未来城市水务管理的创新实践与科技飞跃
  • Go 中的 range 表达式详解:遍历数组、切片、字符串与 Map
  • Docker错误问题解决方法
  • Wpf布局之Canvas面板!
  • 使用 em 单位的好处,以及 em、rem、px 的区别
  • Django ORM 2. 模型(Model)操作
  • 【记录】服务器多用户共享Conda环境——Ubuntu24.04