news 2026/8/26 20:11:07

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/8/25 20:05:22

国产数据库技术学习心得:DM 数据库从实操到应用

在《国产数据库技术》课程学习中,我以达梦数据库(DM)为核心,系统掌握了国产数据库的安装配置、数据管理及开发应用能力。从最初对国产数据库的陌生,到能独立完成实例部署与 SQL 程序设计,每一次实操都让我深…

作者头像 李华
网站建设 2026/8/25 23:37:35

Docker Compose Agent服务扩展全攻略(从入门到高可用部署)

第一章:Docker Compose Agent服务扩展概述在现代微服务架构中,Docker Compose 成为管理多容器应用的首选工具。通过一个声明式的 YAML 文件,开发者能够定义并运行多个相互依赖的服务实例。Agent 服务通常用于采集系统指标、日志或执行远程指令…

作者头像 李华
网站建设 2026/8/26 1:27:10

【加密PDF解析终极指南】:Dify密钥管理核心技术揭秘与实战应用

第一章:加密PDF解析的Dify密钥管理概述在处理加密PDF文档时,密钥管理是确保数据安全与合法访问的核心环节。Dify平台通过集成细粒度的密钥策略,支持对加密PDF内容的安全解析与权限控制。该机制不仅保障了敏感信息在传输与解析过程中的机密性&…

作者头像 李华
网站建设 2026/8/26 14:29:34

节能又达标!基于Linux的污水自动控制方案

在城市化进程飞速发展的今天,污水处理厂作为城市的“肾脏”,其运行效率与稳定性直接关系到水环境安全和可持续发展。传统的污水处理依赖大量人工巡检和手动调节,不仅劳动强度大,更难以应对水质、水量的瞬时变化。而如今&#xff0…

作者头像 李华
网站建设 2026/8/26 18:51:49

企微 SCRM 服务天花板:微伴四级支持,AI 陪跑至盈利

一、行业痛点催生选型刚需:AI 成私域破局关键做私域运营 5 年,最头疼的是 “营销推送不精准”“获客成本高”—— 之前靠 Excel 统计客户,推送内容凭经验,转化率一直上不去。直到接触带 AI 功能的私域 SCRM,我才发现差…

作者头像 李华