news 2026/6/20 13:25:52

2025-简单点-python设计模式之中介者模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
2025-简单点-python设计模式之中介者模式

中介者是一种行为设计模式, 让程序组件通过特殊的中介者对象进行间接沟通, 达到减少组件之间依赖关系的目的。

中介者能使得程序更易于修改和扩展, 而且能更方便地对独立的组件进行复用, 因为它们不再依赖于很多其他的类。

使用示例: 中介者模式在 Python 代码中最常用于帮助程序 GUI 组件之间的通信。 在 MVC 模式中, 控制器是中介者的同义词。

from__future__importannotationsfromabcimportABCclassMediator(ABC):""" The Mediator interface declares a method used by components to notify the mediator about various events. The Mediator may react to these events and pass the execution to other components. """defnotify(self,sender:object,event:str)->None:passclassConcreteMediator(Mediator):def__init__(self,component1:Component1,component2:Component2)->None:self._component1=component1 self._component1.mediator=self self._component2=component2 self._component2.mediator=selfdefnotify(self,sender:object,event:str)->None:ifevent=="A":print("Mediator reacts on A and triggers following operations:")self._component2.do_c()elifevent=="D":print("Mediator reacts on D and triggers following operations:")self._component1.do_b()self._component2.do_c()classBaseComponent:""" The Base Component provides the basic functionality of storing a mediator's instance inside component objects. """def__init__(self,mediator:Mediator=None)->None:self._mediator=mediator@propertydefmediator(self)->Mediator:returnself._mediator@mediator.setterdefmediator(self,mediator:Mediator)->None:self._mediator=mediator""" Concrete Components implement various functionality. They don't depend on other components. They also don't depend on any concrete mediator classes. """classComponent1(BaseComponent):defdo_a(self)->None:print("Component 1 does A.")self.mediator.notify(self,"A")defdo_b(self)->None:print("Component 1 does B.")self.mediator.notify(self,"B")classComponent2(BaseComponent):defdo_c(self)->None:print("Component 2 does C.")self.mediator.notify(self,"C")defdo_d(self)->None:print("Component 2 does D.")self.mediator.notify(self,"D")if__name__=="__main__":# The client code.c1=Component1()c2=Component2()mediator=ConcreteMediator(c1,c2)print("Client triggers operation A.")c1.do_a()print("\n",end="")print("Client triggers operation D.")c2.do_d()

输出:

Client triggers operation A. Component 1 does A. Mediator reacts on A and triggers following operations: Component 2 does C. Client triggers operation D. Component 2 does D. Mediator reacts on D and triggers following operations: Component 1 does B. Component 2 does C.

可以看出是让中介去写触发之后的逻辑链条。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/17 23:22:37

如何在Dify中实现Top级检索体验?相关性评估5步法曝光

第一章:检索结果的 Dify 相关性评估在构建基于大语言模型的应用时,Dify 作为低代码平台提供了强大的工作流编排能力。其中,检索增强生成(RAG)流程中的结果相关性评估是确保输出质量的关键环节。通过量化检索文档与用户…

作者头像 李华
网站建设 2026/6/19 11:59:30

软件测试面试题收集

前言 今天突然看到一些面试题,总感觉会用得到,但是看一遍记不住,就整合在一起,来着各路大佬的分享,为了方便以后自己需要的时候刷一刷,不用再到处找题。 一、京东软件测试岗面试30题(干货&#…

作者头像 李华
网站建设 2026/6/19 12:07:13

为什么你的Dify回滚总是失败?深入剖析版本恢复的5大核心障碍

第一章:为什么Dify工作流回滚机制至关重要在现代AI应用开发中,Dify作为一个低代码平台,极大提升了工作流的构建效率。然而,随着工作流复杂度上升,任何一次配置变更或节点调整都可能引发不可预期的系统行为。此时&#…

作者头像 李华
网站建设 2026/6/16 5:45:11

为什么顶尖团队都在用Dify训练Tesseract自定义词典?真相令人震惊

第一章:为什么顶尖团队都在用Dify训练Tesseract自定义词典?真相令人震惊在OCR(光学字符识别)领域,Tesseract是开源社区的中流砥柱。然而,面对复杂字体、专业术语或低质量扫描件时,其默认词典往往…

作者头像 李华
网站建设 2026/6/15 6:05:20

构建智能对冲策略的5个关键步骤(R语言+真实市场数据案例)

第一章:金融风险对冲的核心概念与R语言环境搭建 金融风险对冲是现代投资组合管理中的关键策略,旨在通过持有特定资产或衍生品来抵消潜在市场波动带来的损失。其核心思想在于利用资产之间的负相关性或统计套利关系,降低整体风险暴露。常见的对…

作者头像 李华
网站建设 2026/6/19 11:22:53

揭秘Dify模糊匹配算法:如何实现精准视频字幕检索(附完整代码示例)

第一章:视频字幕检索的 Dify 模糊匹配在处理大规模视频内容时,精准定位特定对话或场景是关键挑战之一。Dify 平台提供的模糊匹配机制,能够有效提升字幕文本的检索准确率,尤其适用于语音识别结果中常见的拼写误差、断句不一致等问题…

作者头像 李华