适配器模式

目录

一、适配器模式定义

二、适配器模式角色

三、适配器模式的实现

四、适配器模式应用场景


一、适配器模式定义

HandlerAdapter 在 Spring MVC 中使用了适配器模式
适配器模式, 也叫包装器模式。将一个类的接口,转换成客户期望的另一个接口, 适配器让原本接口不兼容的类可以合作无间。
简单来说就是目标类不能直接使用,通过一个新类进行包装一下, 适配调用方法使用, 把两个不兼容的接口通过一定的方式使之兼容。
比如下面两个接口,本身是不兼容的(参数类型不一样, 参数个数不一样等等)

通过适配器,使之兼容:

二、适配器模式角色

  1. Target: 目标接口 (可以是抽象类或接口),客户希望直接用的接口;
  2. Adaptee: 适配者, 但是与Target不兼容;
  3. Adapter: 适配器类, 此模式的核心。 通过继承或者引用适配者的对象, 把适配者转为目标接口;
  4. client: 需要使用适配器的对象。

三、适配器模式的实现

slf4j 就使用了适配器模式, slf4j提供了一系列打印日志的api,底层调用的是log4j 或者 logback 来打日志,作为调用者,只需要调用slf4j的api就行。

java 复制代码
/**
 * slf4j接口
 */
interface Slf4jApi{
 void log(String message);
}

/**
 * log4j 接口
 */
class Log4j{
 void log4jLog(String message){
 System.out.println("Log4j打印:"+message);
 }
}

/**
 * slf4j和log4j适配器
 */
class Slf4jLog4JAdapter implements Slf4jApi{
 private Log4j log4j;
 public Slf4jLog4JAdapter(Log4j log4j) {
 this.log4j = log4j;
 }
 @Override
 public void log(String message) {
 log4j.log4jLog(message);
 }
}

/**
 * 客户端调用
 */
public class Slf4jDemo {
 public static void main(String[] args) {
 Slf4jApi slf4jApi = new Slf4jLog4JAdapter(new Log4j());
 slf4jApi.log("使⽤slf4j打印⽇志");
 }
}

可以看出不需要改变log4j的api,只需要通过适配器转换下, 就可以更换日志框架,保障系统的平稳运行。
适配器模式的实现并不在slf4j-core中(只定义了Logger),具体实现是在针对log4j的桥接器项目slf4j-log4j12中。

四、适配器模式应用场景

一般来说,适配器模式可以看作一种"补偿模式",用来补救设计上的缺陷。应用这种模式算是"无奈之举", 如果在设计初期能协调规避接口不兼容的问题, 就不需要使用适配器模式了。
所以适配器模式更多的应用场景主要是对正在运行的代码进行改造, 并且希望可以复用原有代码实现新的功能。比如版本升级等。

相关推荐
kiracrimson6 天前
栈与队列容器:适配器、deque 与 priority_queue
开发语言·c++·适配器模式
傲世仙尊7 天前
stack-queue与deque-适配器模式中控数组分段连续与仿函数
适配器模式
Eyfcom8 天前
〖物流系统架构演进实录 02〗物流网关设计:多平台接入适配与异构接口的统一收敛
适配器模式·物流管理系统·物流架构·网关设计·多平台对接
yuehuaxin0118 天前
LS8011C 快充协议芯片|SOT‑23‑6L 内置 431,PD3.2 SPR/PPS 适配器物料备选评估调试笔记
笔记·智能家居·适配器模式·智能硬件
yuehuaxin0118 天前
LP3717BSL 芯茂微|SOP8L 自供电 PSR,SEL 电阻调峰值电流,12W 充电器物料替代评估笔记
嵌入式硬件·适配器模式·智能硬件
缓慢更新18 天前
表单引擎的存储建模:宽表与文档库的取舍
运维·服务器·网络·数据库·低代码·oracle·适配器模式
博风21 天前
8、设计模式应用举例:适配器模式:Iterator接口与Enumeration接口
设计模式·适配器模式
范中勤24 天前
适配器模式(Adapter Pattern):原理、场景与 LLM 多厂商工程落地
设计模式·架构·langchain·适配器模式·多厂商
yuehuaxin0124 天前
上海贝岭 BL6523GX(D78) 单相计量芯片开发笔记:引脚定义、寄存器配置与校表流程
嵌入式硬件·智能家居·适配器模式·智能硬件
yuehuaxin011 个月前
LP20R100FN 同步整流|3C 认证适配器 CCM 工况倒灌、温升超标样机避坑解析
嵌入式硬件·智能家居·适配器模式·智能硬件