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

设计模式(三)--适配器模式(Adapter Pattern)

将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作.

比如我们日常开发中使用到的slf4j就使用了适配器模式,slf4j提供了一系列打日志的api,底层调用的是log4j或者logback来打日志,而作为调用者,不需要关心底层具体使用的是哪种库,只需要调用slf4j的api就行了。

适配器模式(Adapter)包含以下主要角色。

目标(Target)接口:可以是抽象类或接口。客户希望直接用的接口

适配者(Adaptee)类:隐藏的转换接口

适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口

如下图所示,目标就是实际干活的类,如log4j,logback,适配者就是slf4j,适配器就是slf4j-log412.jar,把可以把log4j的接口转成slf4j的接口

下面我们来模拟slf4j的实现过程,这是slf4j的api,我们的系统中都是通过这个api来打日志的,就像我们生活中用到的电器都是220v的

public interface Slf4jApi {// 打日志void log(String log);
}

这是log4j的api,与我们使用的日志api不兼容,就像我们去日本旅游,他们的电压是110V的,我们带过去的电器都没法使用

public class Log4j {void log4jLog(String log) {System.out.println(log);}
}

这时我们就需要一个适配器来适配了

public class Slf4jLog4jAdapter implements Slf4jApi {private Log4j log4j;public Slf4jLog4jAdapter(Log4j log4j) {this.log4j = log4j;}@Overridepublic void log(String log) {log4j.log4jLog(log);}
}

测试代码

public class MainTest {public static void main(String[] args) {Log4j log4j = new Log4j();Slf4jApi slf4jApi = new Slf4jLog4jAdapter(log4j);slf4jApi.log("这是日志");}
}

可以看到,我们不需要改变我们所使用的日志api,只要通过适配器转换下,就能保证老系统的平稳运行。

http://www.lryc.cn/news/31363.html

相关文章:

  • Web服务器基础介绍与Apache的简单介绍(LAMP架构与搭建论坛)
  • Linux 进程:exec函数簇
  • 极简RSS订阅器Miniflux
  • 网络通信快速入门
  • 【阅读文档】Vue.js 2.0 之教程文档
  • Docker【基本使用】
  • 算法leetcode|39. 组合总和(rust重拳出击)
  • JavaSE学习笔记总结day18
  • HybridFusion: LiDAR和视觉交叉源点云融合
  • 走进JVM
  • C语言-基础了解-15-C函数指针与回调函数
  • react和vue在响应式上的不同理解
  • 多线程二 多线程了解与使用
  • 嵌入式 Linux 的僵尸进程是什么?
  • 【刷题笔记】笔记一
  • 浏览器主页被hao123劫持的解决方案
  • 华为OD机试题 - 热点网络统计(JavaScript)| 含代码编写思路
  • IT项目经理的自我修养手册
  • 2023年软考中级电子商务设计师考什么?
  • 现在的00后太强了,几个问题差点给我问懵了
  • $3 : 水​​​​​项目实战 - 水果库存系统
  • 毕业设计 基于STM32单片机无线ZIGBEE智能大棚土壤湿度光照检测
  • 华为OD机试真题Java实现【相对开音节】真题+解题思路+代码(20222023)
  • 【C++】30h速成C++从入门到精通(STL容器listvector)
  • 操作系统---存储管理
  • 华为OD机试题 - 好朋友(JavaScript)| 含思路
  • socket本地多进程通信基本使用方法和示例
  • Python 算法交易实验51 Step2 Signals 信号生成
  • app上架专用软著认证电子版权在主流应用商店的使用说明2023年最新版
  • [Mybatis2]Mapper代理开发