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

设计模式之适配器模式

目录

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

定义

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

结构

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

适用场景

      适配器模式适用于以下典型场景:
      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.xdnf.cn/news/14712.html

相关文章:

  • Unity Catalog 三大升级:Data+AI 时代的统一治理再进化
  • Leetcode 3598. Longest Common Prefix Between Adjacent Strings After Removals
  • JDK自带的HttpClient,替代Apache的更优解?
  • Spring Cloud:分布式事务管理与数据一致性解决方案
  • 【如何实现分布式压测中间件】
  • 【算法设计与分析】(二)什么是递归,以及分治法的基本思想
  • 【word】把参考文献序号统一换为上标
  • github上传代码步骤(http)
  • Redis--黑马点评--消息队列
  • 基于 SpringBoot 实现一个 JAVA 代理 HTTP / WS
  • 电压跟随器输入电压正常、输出电压等于0V?
  • WebRTC(十三):信令服务器
  • python动漫周边电商网站系统
  • 视频序列中的帧间匹配技术 FrameMatcher 详解
  • 领域驱动设计(DDD)【23】之泛化:从概念到实践
  • SQL 子查询全位置解析:可编写子查询的 7 大子句
  • Web基础关键_004_CSS(二)
  • 2023国赛linux的应急响应-wp
  • JSON简介及其应用
  • 【LLIE专题】EnlightenGAN 无监督低照度图像增强
  • 实现一个AI大模型当前都无法正确实现的基础二叉树读取算法
  • 商业秘密中经营信息的法律保护探析——以客户名册为例
  • 数字孪生技术引领UI前端设计新革命:实时交互与模拟预测
  • 【Bluedroid】蓝牙启动之BTM_reset_complete源码解析
  • yolov13+bytetrack的目标跟踪实现
  • pytorch中的几个概念
  • 港澳地区,海外服务器ping通可能是地区运营商问题
  • c# sugersql 获取子表数据排序
  • MySQL彻底卸载教程
  • 桌面小屏幕实战课程:DesktopScreen 16 HTTP