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

设计模式每日硬核训练 Day 17:中介者模式(Mediator Pattern)完整讲解与实战应用

🔄 回顾 Day 16:责任链模式小结

在 Day 16 中,我们学习了责任链模式(Chain of Responsibility Pattern):

  • 将请求沿链传递,节点可选择处理或传递下一节点。
  • 实现了请求发送者与多个处理者的解耦,灵活构建处理流。

而今天的主题——中介者模式(Mediator Pattern),是进一步减少对象间直接依赖、简化系统复杂度的重要模式。

中介者模式:通过引入中介者对象,集中控制对象之间的交互,降低对象之间的耦合度。


一、中介者模式属于哪一类设计模式?

中介者模式属于行为型设计模式(Behavioral Pattern)!

为什么?

  • 行为型模式主要关注对象之间的通信与职责分配
  • 中介者模式的本质是:组织、协调多个对象之间的行为交互
  • 它不负责创建对象(不是创建型),也不改变对象结构(不是结构型),而是优化对象如何交互

对比总结:

分类主要目的中介者模式归属理由
创建型模式负责对象创建与实例化(如工厂、单例)❌ 中介者不负责创建对象
结构型模式负责对象组合与组织(如适配器、桥接)❌ 中介者不改变对象静态结构
行为型模式负责对象间通信与职责协作✅ 中介者专注协调对象之间的交互关系

✅ 初学者记忆口诀:

“中介调行为,不管造结构。”


二、中介者模式的核心动机

在复杂系统中,对象与对象之间如果直接通信,会导致:

  • 关系网越来越复杂(网状耦合)
  • 难以维护与扩展(新增对象时需要修改大量类)

✅ 应用动机:

  • GUI 窗口控件之间的联动
  • 聊天室中多用户消息传递
  • 航空交通管制系统中的飞机调度

引入中介者后:

  • 对象不再直接通信,而是统一通过中介者转发、协调
  • 系统结构变得清晰,交互逻辑集中管理

三、结构图(UML)

+----------------+
| Mediator       |
+----------------+
| +notify(sender, event) |
+----------------+/\/  \
+----------------+    +----------------+
| ConcreteMediator |    |  Component    |
+----------------+    +----------------+/\/  \+----------------+ +----------------+| Button          | | Textbox        |+----------------+ +----------------+

在这里插入图片描述

四、角色说明

角色职责描述
Mediator中介者接口,统一协调对象交互
ConcreteMediator具体中介者,管理并协调各对象
Component具体同事对象,持有中介者引用,通过中介通信

五、C++ 实现:窗口控件协作系统

✅ 中介者接口

class Mediator {
public:virtual void notify(const std::string& sender, const std::string& event) = 0;virtual ~Mediator() = default;
};

✅ 具体同事类(Button & Textbox)

class Component {
protected:Mediator* mediator_;
public:void setMediator(Mediator* mediator) { mediator_ = mediator; }virtual ~Component() = default;
};class Button : public Component {
public:void click() {std::cout << "按钮被点击\n";mediator_->notify("Button", "click");}
};class Textbox : public Component {
public:void clear() {std::cout << "文本框被清空\n";}
};

✅ 具体中介者

class DialogMediator : public Mediator {Button* button_;Textbox* textbox_;public:DialogMediator(Button* btn, Textbox* tb) : button_(btn), textbox_(tb) {button_->setMediator(this);textbox_->setMediator(this);}void notify(const std::string& sender, const std::string& event) override {if (sender == "Button" && event == "click") {textbox_->clear();}}
};

✅ 使用示例

int main() {Button button;Textbox textbox;DialogMediator mediator(&button, &textbox);button.click();return 0;
}

输出:

按钮被点击
文本框被清空

六、中介者常见应用场景总结

场景中介者作用说明
GUI 控件交互统一管理按钮、文本框、下拉框的协作逻辑
聊天室系统聊天服务器作为中介,转发各用户消息
航空交通管制系统塔台协调各飞机起降调度
游戏多人房间管理房主服务器协调玩家进入、退出、广播消息
消息总线系统各模块通过事件总线解耦直接通信

七、优点与缺点总结

✅ 优点:

  • 降低对象间耦合,每个对象只与中介者通信
  • 集中管理交互逻辑,系统结构更清晰
  • 便于扩展和维护(新增组件只需修改中介者)

❗ 缺点:

  • 中介者自身可能变得非常复杂(上帝对象)
  • 所有交互集中,压力较大,需要合理设计拆分

八、中介者与观察者/责任链的对比

模式意图特点
中介者 Mediator集中管理对象交互主动协调,多对多交互集中处理
观察者 Observer订阅发布消息通知事件驱动,广播式通知
责任链 Chain传递请求链式处理责任转移,单线处理

九、面试回答模板

“我们在聊天系统中使用中介者模式,服务器作为中心节点协调所有客户端消息,不让客户端之间直接通信。这样新增客户端、扩展功能都无需修改已有客户端逻辑,只需修改服务器中介者逻辑,显著降低系统耦合。”

✅ 建议强调:集中管理、降低耦合、支持扩展。


十、口诀记忆

“通信中有桥,独立少烦恼;集中掌控流,系统易扩展。”


十一、明日预告:Day 18

备忘录模式(Memento Pattern):保存对象内部状态,实现撤销与恢复功能,保护封装性。


相关文章:

设计模式每日硬核训练 Day 17:中介者模式(Mediator Pattern)完整讲解与实战应用

&#x1f504; 回顾 Day 16&#xff1a;责任链模式小结 在 Day 16 中&#xff0c;我们学习了责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;&#xff1a; 将请求沿链传递&#xff0c;节点可选择处理或传递下一节点。实现了请求发送者与多个处理者的解耦…...

文章记单词 | 第63篇(六级)

一&#xff0c;单词释义 vegetable [ˈvedʒtəbl] n. 蔬菜&#xff1b;植物人&#xff1b;生活单调乏味的人&#xff1b;adj. 蔬菜的&#xff1b;植物的faint [feɪnt] adj. 模糊的&#xff1b;微弱的&#xff1b;虚弱的&#xff1b;v. 昏倒&#xff0c;昏厥&#xff1b;n. 昏…...

ES类的索引轮换

通过以下请求方法创建一个名为 “tiered-storage-policy” 的 ISM policy&#xff1a; PUT _plugins/_ism/policies/tiered-storage-policy {"policy": {"description": "Changes replica count and deletes.","schema_version": 1,…...

小白机器人假想:分布式关节控制——机器人运动的未来模式?

引言 在机器人技术快速发展的今天&#xff0c;控制架构的创新往往能带来突破性进展。作为一名机器人爱好者&#xff0c;我最近思考了一个大胆的设想&#xff1a;如果机器人的每个关节都配备独立的动作存储器和处理器&#xff0c;并通过高速光纤网络与中央"驱动总脑"…...

LangChain4j +DeepSeek大模型应用开发——9 优化硅谷小鹿

1.预约业务的实现 这部分我们实现硅谷小鹿的查询订单、预约订单、取消订单的功能 创建MySQL数据库表 CREATE DATABASE xiaolu; USE xiaolu; -- 创建预约表 appointment CREATE TABLE appointment (id BIGINT NOT NULL AUTO_INCREMENT COMMENT 主键ID&#xff0c;自增, -- 主…...

Oracle VirtualBox 在 macOS 上的详细安装步骤

Oracle VirtualBox 在 macOS 上的详细安装步骤 一、准备工作1. 系统要求2. 下载安装包二、安装 VirtualBox1. 挂载安装镜像2. 运行安装程序3. 处理安全限制(仅限首次安装)三、安装扩展包(增强功能)四、配置第一个虚拟机1. 创建新虚拟机2. 分配内存3. 创建虚拟硬盘4. 加载系…...

Day110 | 灵神 | 二叉树 | 根到叶路径上的不足节点

Day110 | 灵神 | 二叉树 | 根到叶路径上的不足节点 1080.根到叶路径上的不足节点 1080. 根到叶路径上的不足节点 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者一开始没看懂&#xff0c;只能通过部分的例子&#xff0c;原因是把路径和小于limit的都给删了…...

超详细讲解C语言转义字符\a \b \r \t \? \n等等

转义字符 C语言有一组字符很特殊&#xff0c;叫做转义字符&#xff0c;顾名思义&#xff0c;改变原来的意思的字符。 1 \? ??)是一个三字母词&#xff0c;在以前的编译器它会被编译为] (??会被编译为[ 因此在以前输入(are you ok ??)就会被编译为are you ok ] 解决这个…...

TensorFlow 多卡训练 tf多卡训练

目录 export TF_GPU_ALLOCATORcuda_malloc_async &#x1f527; 具体作用 优势 &#x1f9e9; 依赖条件 ✅ 设置方式&#xff08;Linux/macOS&#xff09; export TF_GPU_ALLOCATORcuda_malloc_async 是设置 TensorFlow 使用 CUDA 异步内存分配器 的环境变量。这个设置可…...

数据结构--树状数组

树状数组&#xff08;Fenwick Tree&#xff09; 概述 树状数组是一种用于高效处理动态数组中前缀和查询的数据结构。它能够在 O ( l o g n ) O(log n) O(logn) 时间复杂度内完成以下操作&#xff1a; 更新数组中的元素O(logn)查询数组前缀和O(logn) 数组&#xff1a; O(1)…...

如何使用python保存字典

在Python中&#xff0c;可以通过多种方式将字典&#xff08;dict&#xff09;保存到文件中&#xff0c;并能够随时读取恢复。以下是几种常见的方法&#xff1a; 1. 使用 json 模块&#xff08;推荐&#xff09; 适用场景&#xff1a;需要人类可读的文件格式&#xff0c;且数据不…...

C和指针——预处理

预处理是编译前的过程&#xff0c;主要对define&#xff0c;include以及一些编译器定义的内容进行替换 #define的本质就是替换 1、例子 #define FOREVER for(;;) 2、例子 #define TEMPD "1231231231\ 123123123" \\如果太长了&#xff0c;可以用\换行 3、例子——可…...

windows python ta-lib安装

https://github.com/TA-Lib/ta-lib/releases windows安装ta-lib指令 pip install --no-cache-dir https://github.com/cgohlke/talib-build/releases/download/v0.6.3/ta_lib-0.6.3-cp310-cp310-win_amd64.whl...

机器学习+多目标优化的算法如何设计?

一、核心问题与设计思路 机器学习&#xff08;ML&#xff09;与多目标优化&#xff08;MOO&#xff09;的结合旨在解决两类核心问题&#xff1a; 利用ML提升MOO算法的性能&#xff1a;通过机器学习模型预测解的质量、优化搜索方向或加速收敛&#xff1b;利用MOO优化ML模型的多…...

爬虫管理平台-最新版本发布

TaskPyro 是什么&#xff1f; TaskPyro 是一个轻量级的 Python 任务调度平台&#xff0c;专注于提供简单易用的任务管理和爬虫调度解决方案。它能够帮助您轻松管理和调度 Python 任务&#xff0c;特别适合需要定时执行的爬虫任务和数据处理任务。 官方文档&#xff1a;https:/…...

SpringCloud教程 — 无废话从0到1逐步学习

目录 什么是微服务&#xff1f;​ 微服务与单体架构的区别 微服务主要用法概念 远程调用 服务注册/发现&注册中心 配置中心 服务熔断&服务降级 1&#xff09;服务熔断 2&#xff09;服务降级 API 网关 环境准备 Nacos OpenFeign Gateway Sentinel Sea…...

Webug4.0通关笔记12- 第17关 文件上传之前端拦截(3种方法)

目录 一、文件上传前端拦截原理 二、第17关 文件上传(前端拦截) 1.打开靶场 2.构造php脚本 3.源码分析 &#xff08;1&#xff09;js源码 &#xff08;2&#xff09;服务器源码 &#xff08;3&#xff09;总结 4.渗透实战 &#xff08;1&#xff09;禁用js法 &#…...

使用synchronized关键字同步Java线程

问题 在Java多线程编程中&#xff0c;你需要保护某些数据&#xff0c;防止多个线程同时访问导致数据不一致或程序错误。 解决方案 在需要保护的方法或代码段上使用synchronized关键字。 讨论 synchronized关键字是Java提供的同步机制&#xff0c;用于确保在同一时刻只有一…...

从头训练小模型: 2 监督微调SFT

简介 从头训练小模型是我个人对大语言模型(LLM)学习中的重要部分。 通过对一个小规模模型的最小化复现实践&#xff0c;我不仅能够深入理解模型训练的基本流程&#xff0c;还可以系统地学习其中的核心原理和实际运行机制。这种实践性的学习方法让我能够直观地感受模型训练的每…...

【QT】QT中http协议和json数据的解析-http获取天气预报

QT中http协议和json数据的解析 1.http协议的原理2.QT中http协议的通信流程2.1 方法步骤 3.使用http协议&#xff08;通过http下载图片和获取天气预报信息&#xff09;3.1 http下载网络上的图片(下载小文件)3.1.1 示例代码3.1.2 现象 3.2 获取网络上天气预报3.2.1 免费的天气预报…...

PiscTrace针对YOLO深度适配:从v8到v12

一、YOLO简介&#xff1a;目标检测的核心技术 YOLO&#xff08;You Only Look Once&#xff09;是近年来最为流行的目标检测模型&#xff0c;凭借其实时性与高精度&#xff0c;广泛应用于自动驾驶、视频监控、安防检测等多个领域。YOLO系列模型自v1问世以来&#xff0c;经过不…...

前端面试每日三题 - Day 24

这是我为准备前端/全栈开发工程师面试整理的第24天每日三题练习&#xff0c;涵盖了&#xff1a; JavaScript 中的 Promise.all()、Promise.race() 和 Promise.allSettled() 的实际应用和性能差异React 中的 Concurrent Rendering 和 useTransition API如何设计一个高并发的在线…...

正态分布习题集 · 题目篇

正态分布习题集 题目篇 全面覆盖单变量正态、多变量正态、参数估计、假设检验、变换以及应用&#xff0c;共 20 题&#xff0c;从基础到进阶。完成后请移步《答案与解析篇》。 1. 基础定义与性质&#xff08;5题&#xff09; 1.1 密度函数 写出正态分布 N ( μ , σ 2 ) N(…...

Three.js在vue中的使用(二)-动画、材质

一、Three.js 动画原理与实现 1. 基本原理 Three.js 的动画系统基于 关键帧&#xff08;Keyframe&#xff09; 和 时间轴&#xff08;AnimationClip&#xff09; 实现&#xff1a; THREE.AnimationMixer&#xff1a;管理多个动画片段的播放器THREE.AnimationClip&#xff1a…...

【办公类-99-04】20250504闵豆统计表excle转PDF,合并PDF、添加中文字体页眉+边框下划线

需求说明 督导检查&#xff0c;各条线都要收集资料。 今天去加班&#xff0c;遇到家教主任&#xff0c;她让我用保教主任的彩色打印机打印这套活跃度表格。&#xff08;2023学年上学期下学期-2024学年上学期&#xff0c;就是202309-202504&#xff09; 每个excle都是内容在A4一…...

ES类迁移方法

快照(s3 file FS)跨集群迁移es-dumpremote-reindexLogstash Elasticsearch 迁移方法 Elasticsearch 迁移是将数据、索引和配置从一个 Elasticsearch 集群转移到另一个集群的过程。以下是几种常见的迁移方法&#xff1a; 1. 快照和恢复 (Snapshot and Restore) 这是最推荐的…...

智能合约部署之全国职业院校技能大赛“区块链技术应用”赛项—“航班延误险案例”

智能合约部署之全国职业院校技能大赛“区块链技术应用”赛项—“航班延误险案例” 1.启动虚拟机上的区块链 (1)打开VMware虚拟机,在桌面中点击右键,选择Open Terminal打开命令行窗口。 (2)使用"cd geth_local/"命令,切换至区块链根目录,输入下面的命令启动…...

STM32外设-GPIO输入(仅数字)

STM32外设-GPIO输入 一&#xff0c;输入的三种类型1. 上拉 (Pull-up)输入2. 下拉 (Pull-down)输入3. 浮空 (Floating / High-Impedance)输入 二&#xff0c;下拉电阻的作用 学完基础的led&#xff0c;接下来学习key即按键&#xff0c;但在连接按键之前&#xff0c;我们必须了解…...

QT开发工具对比:Qt Creator、Qt Designer、Qt Design Studio

前端开发工具—Qt Designer Qt Designer是Qt框架的一部分&#xff0c;是一个图形用户界面设计工具。它允许开发者通过可视化方式设计和布局GUI组件&#xff0c;而无需手动编写UI代码。设计完成后&#xff0c;Qt Designer生成UI文件&#xff08;通常以.ui为扩展名&#xff09;&…...

(ADC)数模转换器的不同类型对比

&#xff08;ADC&#xff09;数模转换器的不同类型对比 数模转换器&#xff08;ADC&#xff09;类型详解1. **并行比较型ADC&#xff08;Flash ADC&#xff09;****工作原理****优缺点****应用场景** 2. **逐次逼近型ADC&#xff08;SAR ADC&#xff09;****工作原理****优缺点…...

MOS管极间电容参数学习

文章目录 前言1. 输入电容&#xff08;Ciss&#xff09;2. 输出电容&#xff08;Coss&#xff09;3. 反向转移电容&#xff08;Crss&#xff09;4&#xff0c;测试条件解读总结 前言 MOS管在电路设计中非常常用&#xff0c;用途包括DC-DC&#xff0c;电平转换等&#xff0c;所…...

Webug4.0靶场通关笔记14- 第18关 文件上传之Nginx解析缺陷

目录 第18关 渗透实战 1.打开靶场 2.构造php脚本 3.源码分析 &#xff08;1&#xff09;客户端源码 &#xff08;2&#xff09;服务的源码 4.Nginx解析法渗透 &#xff08;1&#xff09;缺陷原因 &#xff08;2&#xff09;缺陷条件 &#xff08;3&#xff09;构造脚…...

外观模式(Facade Pattern)

非常好&#xff01;现在我们来讲解结构型设计模式之一&#xff1a;外观模式&#xff08;Facade Pattern&#xff09;。 我会通过&#xff1a; ✅ 简洁定义 &#x1f3af; 为什么需要 &#x1f40d; Python 代码&#xff08;含注释&#xff09; &#x1f9ed; 流程图 应用场…...

Javase 基础加强 —— 03 集合

本系列为笔者学习Javase的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程&#xff0c;java零基础入门到大牛一套通关》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习Javase系列课程的同学们提供参考。 集合是一种容…...

【React】 Hooks useTransition 解析与性能优化实践

1.背景 useTransition 是 React 18 引入的一个并发模式下的 Hook&#xff0c;用于区分紧急和非紧急的状态更新&#xff0c;提升应用的响应性和用户体验;它可以管理 UI 中的过渡状态&#xff0c;特别是在处理长时间运行的状态更新时。它允许你将某些更新标记为“过渡”状态&…...

C++23 std::tuple与其他元组式对象的兼容 (P2165R4)

文章目录 引言C23 std::tuple概述std::tuple的定义和基本用法std::tuple的特性std::tuple的应用场景 其他元组式对象的特点Python元组的特点Python元组与C std::tuple的对比 P2165R4提案的具体内容提案背景提案主要内容提案的影响 兼容性示例代码总结 引言 在C编程的世界里&am…...

网络Tips20-003

1.E1载波的控制开销占2/32*100%6.25%&#xff0c;E1载波的基本帧传送时间是125uS。 2.计算机在一个指令周期的过程中&#xff0c;为从内存读取指令操作码&#xff0c;首先要将.程序计数器(PC)的内容送到地址总线上 3.3DES算法:密码学中&#xff0c;3DES是三重数据加密算法通称…...

Rust的安全卫生原则

在Rust编程世界里&#xff0c;unsafe关键字常常让初学者感到困惑。他们经常会问&#xff1a;“在unsafe块里能做什么&#xff1f;”“什么时候需要使用unsafe&#xff1f;” 这些问题虽然很常见&#xff0c;但对于真正理解Rust的安全机制来说还远远不够。因为随着Rust操作语义的…...

TestBench激励与待测

TestBench激励与待测 ✅ 一、TestBench 的作用✅ 二、例化的目的✅ 三、TestBench 中的信号类型选择&#x1f7e2; 输入端口&#xff08;input&#xff09; → 在 TestBench 中声明为 reg&#x1f7e1; 输出端口&#xff08;output&#xff09;→ 在 TestBench 中声明为 wire ✅…...

VulnHub-OSCP靶机

前言&#xff1a;由于这台机器过于简单&#xff0c;所以我会尽量细化和介绍每个步骤以及涉及到的知识点&#xff0c;让正在打入门机器的你不在迷茫和硬化的操作&#xff0c;理解并熟悉每条命令以及参数的含义&#xff0c;以及把前期带给我们的信息进行快速筛选&#xff0c;有利…...

【前端】【面试】在 Nuxt.js SSR/SSG 应用开发的 SEO 优化方面,你采取了哪些具体措施来提高页面在搜索引擎中的排名?

在 Nuxt.js 的 SSR&#xff08;服务器端渲染&#xff09;或 SSG&#xff08;静态站点生成&#xff09;应用中&#xff0c;SEO 优化是非常核心的工作内容之一。利用 Nuxt.js 的特性&#xff0c;我们可以通过多个维度系统地提升搜索引擎排名。 下面是我在实际项目中采取的 SEO 优…...

软考 系统架构设计师系列知识点之杂项集萃(53)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;52&#xff09; 第85题 在静态测试中&#xff0c;主要是对程序代码进行静态分析。“数据初始化、赋值或引用过程中的异常”属于静态分析中的&#xff08;&#xff09;。 A. 控制流分析 B. 数据…...

【AI面试准备】模型自动化评估经验

面试要求&#xff1a;模型自动化评估经验。 以下是针对模型自动化评估经验的结构化知识总结&#xff0c;涵盖核心概念、工具链、高频考点和面试回答技巧&#xff0c;助你快速掌握关键点&#xff1a; 目录 **一、模型自动化评估的核心逻辑**1. **为什么要自动化评估&#xff1f…...

indexedDB

indexedDB 特点 **容量大&#xff1a;**不同浏览器不一样&#xff0c;250MB **遵守同源策略&#xff1a;**只能访问同源下的数据库&#xff0c;不能跨域 **异步操作&#xff1a;**防止阻塞&#xff08;特别是大量数据的操作&#xff09; 事务支持‌&#xff1a;确保数据的…...

Mybatis学习(下)

目录 1. 动态sql的应用 1.2 1.2 1.3 、 、 标签 1.4 1. 动态sql的应用 使用Mybatis框架时, 对于sql数据的操作量比较大的时候, 看着会觉得很乱, 可能写着写着就乱了, 或者说回过头来发现sql语句写错了, 很麻烦, 所以动态sql就可以让我们用Java代码, 替换部分sql语句 1.2 &l…...

[三分钟学算法]分治-快速排序-最小的K个数:设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。

文章目录 题目详情算法原理编写代码 题目详情 题目链接 设计一个算法&#xff0c;找出数组中最小的k个数。以任意顺序返回这k个数均可。 示例&#xff1a; 输入&#xff1a; arr [1,3,5,7,2,4,6,8], k 4 输出&#xff1a; [1,2,3,4]提示&#xff1a; 0 < len(arr) <…...

从github的插件直接导入unity

我们随便找个插件&#xff1a; A&#xff1a;处直接下载压缩包文件&#xff0c;或是git下载也可以 B&#xff1a;直接下载打好包也行 我们这里选择直接下好的包 请注意!!!有些版本可能不支持&#xff0c;请找到支持的&#xff0c;对应的历史版本进行下载使用 点击B&#xf…...

Linux | 了解Linux中的任务调度---at与crontab 命令

一. 延迟任务 1.1 延迟任务的发起 -- at命令 at命令执行是调用的是atd服务&#xff0c;即使系统最小化安装atd也会被安装到系统中at 任务信息存放在系统中/var/spool/at目录中at 任务的日志文件被存放到/var/log/cron中at 任务执行时如果遇到系统处于关闭状态&#xff0c;那么…...

多语言笔记系列:Polyglot Notebooks 多种使用方式

.NET Interactive 使用方式 .NET Interactive生态&#xff0c;大约由&#xff1a;前端UI(Jupyter、VSCode等)、交互协议(PMP、JMP)、执行器(.net interactive)和语言服务组成。 有多种组合方式&#xff0c;来使用。最常用的还是 VS Code(Polyglot Notebooks插件)充当前端UI&am…...

TF-IDF算法详解

引言 TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff09;是信息检索和文本挖掘中常用的加权技术&#xff0c;用于评估一个词语对于一个文档集或语料库中某个文档的重要程度。 一、基本概念 1. 组成要素 TF-IDF由两部分组成&#xff1a; TF (Term F…...