【Java EE】日志框架(SLF4J)与门面模式

ops/2024/9/25 19:18:14/

文章目录

  • 🍀SLF4j
  • 🌳门面模式(外观模式)
    • 🌸门面模式的定义
    • 🌸门面模式的模拟实现
    • 🌸门面模式的优点
  • 🌲关于SLF4J框架
  • ⭕总结

🍀SLF4j

在这里插入图片描述
SLF4J不同于其他⽇志框架,它不是⼀个真正的⽇志实现,⽽是⼀个抽象层,对⽇志框架制定的⼀种规范、标准、接⼝.所有SLF4J并不能独⽴使⽤,需要和具体的⽇志框架配合使用

🌳门面模式(外观模式)

SLF4J是⻔⾯模式的典型应⽤(但不仅仅使⽤了⻔⾯模式).

🌸门面模式的定义

⻔⾯模式(Facade Pattern)⼜称为外观模式,提供了⼀个统⼀的接⼝,⽤来访问⼦系统中的⼀群接⼝.

其主要特征是定义了⼀个⾼层接⼝,让⼦系统更容易使用。

原⽂: Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higherlevel interface that makes the subsystem easier to use.
解释:要求⼀个⼦系统的外部与其内部的通信必须通过⼀个统⼀的对象进⾏. ⻔⾯模式提供⼀个⾼层
次的接⼝,使得⼦系统更易于使⽤.

在这里插入图片描述
⻔⾯模式主要包含2种⻆⾊:

  • 外观⻆⾊(Facade):也称⻔⾯⻆⾊,系统对外的统⼀接⼝.

  • ⼦系统⻆⾊(SubSystem):可以同时有⼀个或多个SubSystem.每个SubSytem都不是⼀个单独的类,⽽是⼀个类的集合.SubSystem并不知道Facade的存在,对于SubSystem⽽⾔,Facade只是另⼀个客⼾端⽽已(即Facade对SubSystem透明)

⽐如去医院看病,可能要去挂号, ⻔诊, 化验, 取药, 让患者或患者家属觉得很复杂, 如果有提供接待⼈
员, 只让接待⼈员来处理, 就很⽅便.

在这里插入图片描述

🌸门面模式的模拟实现

场景: 回家, 我们会开各个屋的灯. 离开家时, 会关闭各个屋的灯
如果家⾥设置⼀个总开关, 来控制整个屋的灯就会很⽅便.
我们使⽤⻔⾯模式的实现

public class FacadePatternDemo {public static void main(String[] args) {LightFacade lightFacade = new LightFacade();lightFacade.lightOn();}
}
/*** 灯的⻔⾯*/
class LightFacade{private Light livingRoomLight = new LivingRoomLight();private Light hallLight = new HallLight();private Light diningLight = new DiningLight();public void lightOn(){livingRoomLight.on();hallLight.on();diningLight.on();}public void lightOff(){livingRoomLight.off();hallLight.off();diningLight.off();}
}
interface Light {void on();void off();
}
/*** 客厅灯*/
class LivingRoomLight implements Light{@Overridepublic void on() {System.out.println("打开客厅灯");}@Overridepublic void off() {System.out.println("关闭客厅灯");}
}
/*** ⾛廊灯*/
class HallLight implements Light{@Overridepublic void on() {System.out.println("打开⾛廊灯");}@Overridepublic void off() {System.out.println("关闭⾛廊灯");}}
/*** 餐厅灯*/
class DiningLight implements Light{@Overridepublic void on() {System.out.println("打开餐厅灯");}@Overridepublic void off() {System.out.println("关闭餐厅灯");}
}

🌸门面模式的优点

  • 减少了系统的相互依赖.实现了客⼾端与⼦系统的耦合关系,这使得⼦系统的变化不会影响到调⽤它的客⼾端;

  • 提⾼了灵活性,简化了客⼾端对⼦系统的使⽤难度,客⼾端⽆需关⼼⼦系统的具体实现⽅式,⽽只需要和⻔⾯对象交互即可.

  • 提⾼了安全性.可以灵活设定访问权限,不在⻔⾯对象中开通⽅法,就⽆法访问

🌲关于SLF4J框架

SLF4J就是其他⽇志框架的⻔⾯.SLF4J可以理解为是提供⽇志服务的统⼀API接⼝,并不涉及到具体的⽇志逻辑实现

那么为什么要引入日志门面呢?我们来看一下引入与不引入的区别就知道了

常⻅的⽇志框架有log4J, logback等. 如果⼀个项⽬已经使⽤了log4j,⽽你依赖的另⼀个类库,假如是
Apache Active MQ, 它依赖于另外⼀个⽇志框架logback, 那么你就需要把logback也加载进去.

在这里插入图片描述
存在问题:

  1. 不同⽇志框架的API接⼝和配置⽂件不同, 如果多个⽇志框架共存, 那么不得不维护多套配置⽂件(这
    个配置⽂件是指⽤⼾⾃定义的配置⽂件).
  2. 如果要更换⽇志框架, 应⽤程序将不得不修改代码, 并且修改过程中可能会存在⼀些代码冲突.
  3. 如果引⼊的第三⽅框架, 使⽤了多套, 那就不得不维护多套配置.

🌸引入日志门面

引⼊⻔⾯⽇志框架之后, 应⽤程序和⽇志框架(框架的具体实现)之间有了统⼀的API接⼝(⻔⾯⽇志框架
实现), 此时应⽤程序只需要维护⼀套⽇志⽂件配置, 且当底层实现框架改变时, 也不需要更改应⽤程序代码.
在这里插入图片描述
SLF4J 就是这个⽇志⻔⾯.
总的来说,SLF4J使你的代码独⽴于任意⼀个特定的⽇志API,这是⼀个对于开发API的开发者很好的思想.

⭕总结

感谢大家的阅读,希望得到大家的批评指正,和大家一起进步,与君共勉!


http://www.ppmy.cn/ops/18578.html

相关文章

基于机器学习的车辆状态异常检测

基于马氏距离的车辆状态异常检测(单一传感器) 基于多元自动编码器的车辆状态异常检测 基于单传感器平滑马氏距离的车辆状态异常检测 工学博士,担任《Mechanical System and Signal Processing》等期刊审稿专家,擅长领域&#xff1…

状态后端的选择,真实业务场景使用File system?还是使用RocksDB?

1.状态、状态后端、Checkpoint的区别和关系? (1)状态:状态的本质是数据; (2)状态后端:存储状态的方式,比如说Memory、filesystem、Rocksdb三种状态后端来存储的状态。 …

Electron 桌面应用程序的框架,快速入门搭建一个桌面程序

Electron是什么? Electron 快捷传送门,点击走你。。。 快速让你的web项目成为桌面应用 // 初始化一个 package.json npm init// 添加 Electron 依赖,安装过可忽略 npm install --save-dev electron{ "name": "my-electron-app",&…

软硬件无缝集成:新加坡量子公司首创下一代量子集成平台

为了充分发挥量子系统的性能,已经公认的一个关键方法是在硬件和软件层之间实现紧密集成。这种集成使得软件能够充分利用硬件的所有特性,以实现最佳性能。随着行业努力开发能够提供量子优势的系统,实现这种高性能显然是非常必要的。 Horizon的…

本地Windows主机,使用pycharm通过wsl的ubuntu来创建django项目

Windows主机在pycharm中通过wsl的ubuntu来创建django项目 需求:在windows主机中创建python项目再转接到linux服务器中运行,有点麻烦。【特别是存放日志文件或其他文件路径时需要修改为linux中的路径】 1:我的是windows主机 2:有…

[USACO18DEC] S 补题报告

目录 1 AC情况2 题目详情Convention SConvention II SMooyo Mooyo S 1 AC情况 Convention SConvention II SMooyo Mooyo S Accepted \texttt{\color{green}{Accepted}} Accepted Accepted \texttt{\color{green}{Accepted}} Accepted Unaccepted \texttt{\color{red}{Unaccept…

短视频矩阵营销系统 poihuoqu 任意文件读取漏洞复现

0x01 产品简介 短视频矩阵营销系统是由北京华益云数据科技有限公司开发的一款产品,这家公司专注于抖音短视频矩阵营销系统的研发,致力于为企业提供全方位的短视频营销解决方案。华益云抖销短视频矩阵系统可以帮助企业快速搭建多个短视频账号,实现内容的批量制作和发布,提高…

神经网络的激活函数

目录 神经网络 激活函数 sigmoid 激活函数 tanh 激活函数 backward方法 relu 激活函数 softmax 激活函数 神经网络 人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN)&#xff0c…