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

文章目录

  • 🍀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.mzph.cn/diannao/4932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跟TED演讲学英文:AI isn‘t as smart as you think -- but it could be by Jeff Dean

AI isn’t as smart as you think – but it could be Link: https://www.ted.com/talks/jeff_dean_ai_isn_t_as_smart_as_you_think_but_it_could_be Speaker: Jeff Dean Jeffrey Adgate “Jeff” Dean (born July 23, 1968) is an American computer scientist and software…

【服务器部署篇】Linux下快速安装Jenkins

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是,产…

网站建设企业网站优化

近年来,随着互联网的迅速发展,企业网站已经成为了企业展示自我形象与实力的重要载体之一。然而,单单拥有一个美观、简洁的企业网站并不能让企业在竞争激烈的市场中脱颖而出。因此,在建设企业网站的过程中,我们需要将企…

C++常用的输入输出方法(ACM模式)

文章目录 前言一、输入输出方法1、cin2、getline()3、getchar() 二、算法案例1、一维数组1.1 输入固定长度1.2长度不固定 2、固定二维数组3、以非空格隔开的元素输入3、常见数据结构定义以及输入3.1 链表 前言 C中的输入输出函数有很多,我们本章只针对大部分算法题…

上位机图像处理和嵌入式模块部署(树莓派4b开机界面程序自启动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们学习了如何在树莓派4b上面开发qt,也学习了如何用/etc/rc.local启动控制台程序,那今天我们继续学习一下如何利用树莓…

docker compose安装redis

一、安装准备 在docker hub查看redis镜像版本。查看地址如下: Dockerhttps://hub-stage.docker.com/_/redis/tags 二、拉取docker镜像 我这里用redis:6.2.14版本,先拉取镜像。命令如下: docker pull redis:6.2.14 查看刚刚下载的镜像&am…

[python数据处理系列] 深入理解与实践基于聚类的过采样与欠采样技术:以K-Means为例

目录 一、过采样介绍 (一)什么是过采样 (二)过采样的优点 (三)过采样的缺点 二、欠采样介绍 (一)什么是欠采样 (二)欠采样的优点 (三)欠采样的缺点 三、基于聚类的欠抽样方法(K-Means欠采样/KMeans-Undersampling) (一)KMeans欠采样原理及其步骤介绍 (二)为什么不采…

clickhouse学习笔记05

ClickHouseSpringBoot2.XMybatisPlus整合搭建 添加需要的依赖: 添加clickhouse依赖: 配置数据库配置: 我们框架就搭建完了。 ClickHouse的项目案例统计需求讲解 ClickHouse的项目案例统计库表和数据准备 添加数据: 数据都插入进来…

js逆向进阶篇-某团酒店

提示!本文章仅供学习交流,严禁用于任何商业和非法用途,未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,如有侵权,可联系本文作者删除! 案例分析: 先来看看请求中有哪些参数是需要我们逆向,如下: mtgsig、fp、roh…

ERROR: [7df2405] missing Change-Id in commit message footer

git push origin HEAD:refs/for/[分支名] 使用“git push origin HEAD:refs/for/[分支名]”,报错信息见下图 报错信息:ERROR: [7df2405] missing Change-Id in commit message footer 解决办法 根据git的提示依次执行下面的语句即可 第一步:输入下面的语句,下载一个 g…

Java---数据类型与变量

1.字面常量 字面常量就是我们经常所说的常量,常量即在程序运行期间,固定不变的量。且常量是无法改变的,如果我们的代码有改变常量的操作,程序就会报错。 1.1字面常量的分类 字符串常量,整型常量,浮点数常…

FileLink内外网文件摆渡系统产品介绍

在现代企业中,往往存在着多个网络、系统之间的数据孤岛问题,数据难以互相访问和共享。 一、常用的内外网文件摆渡方式 传统的数据交换方式往往需要人工介入,效率低下且容易出错。如:U盘、FTP、VPN等,极易引发各种各样…

Mysql事务—隔离级别—脏读、不可重复读、幻读-遥遥领先版

事务的基本概念 事务就是一组原子性的操作,这些操作要么全部发生,要么全部不发生。事务把数据库从一种一致性状态转换成另一种一致性状态。 事务最经典也经常被拿出来说例子就是转账了。 假如小明要给小红转账1000元,这个转账会涉及到两个…

libcudart.so.10.2: cannot open shared object file: No such file or directory

文章目录 整体过程细节在虚拟环境中安装cuda 10.2在虚拟环境中安装cuda 12.1 整体过程 首先出现这个报错说明在/usr/local/cuda-11.5/lib64目录中确实没有libcudart.so.10.2这个文件,然后按照网上的教程,我在虚拟环境中安装了cuda10.2(由于用…

mysql面试题九(SQL优化)

目录 1.一条 SQL 是如何执行的 2.索引失效的几种情况 3.EXPLAIN 4.Where 子句如何优化 5.超大分页或深度分页如何处理 6.大表查询如何优化 7.分库分表 基本概念 分库分表方法 水平拆分 垂直拆分 分库分表后的注意事项 1.一条 SQL 是如何执行的 在MySQL中&#xff0…

uni-app - 使用地图功能打包安卓apk的完美流程以及重要的注意事项(带您一次打包成功)

在移动应用开发中,地图功能是一个非常常见且实用的功能,可以帮助用户快速定位并浏览周边信息。而在uni-app开发中,使用地图功能也是一项必备技能。本文将介绍uni-app使用地图功能打包安卓apk的注意事项,帮助开发者顺利完成地图功能…

掼蛋跟牌技巧

掼蛋跟牌是指其他玩家领出牌,自己跟着出牌,在跟牌的时候,分为强牌和弱牌两种情况,一般强牌以顺牌为主,弱牌以顶牌为主。 一、上家领出牌 在游戏前期,上家领出牌的时候,应该尽量跟牌,…

Pulsar 2

文章目录 一、Pulsar高级组件基本使用1、Funcation(轻量级计算流程)概念与使用Function背景介绍什么是Functions如何使用 2、Pulsar Connector 连接器Pulsar Connector 连接器 ----> Pulsar Flink Connector 3、Transactions事务支持相关的操作Pulsar如何实现Exactly-OncePu…

2024年的Java版本选择?java 17 安装

文章目录 2024年的Java版本选择?java 1.8 和 java17 什么区别?java 17 安装windows 11安装java 17C:\Program Files\Common Files\Oracle\Java\javapath是什么 2024年的Java版本选择? 3年前,java 1.8是市场主流(还有一…

BUU_RE

findit String m String.valueOf(x) valueOf()将不同类型数据转换为字符串 m.equals(edit.getText().toString()) edit.getText()通常用于从用户界面中获取文本输入,toString()方法将其转换为字符串,然后使用equals()方法进行比较 我改成了c代码&a…