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

行为型设计模式-中介者(mediator)模式-python实现

设计模式汇总:查看

通俗示例

想象一下你正在参与一个团队项目,团队成员包括设计师、前端开发者、后端开发者、测试工程师等。每个团队成员都需要与其他成员沟通协作,比如设计师完成设计后需要通知前端开发者开始开发,前端开发者完成后需要通知测试工程师进行测试。如果每个团队成员都直接与其他所有团队成员沟通,那么沟通线路会变得非常复杂。为了简化这个过程,团队可以引入一个项目经理的角色,所有团队成员只与项目经理沟通,由项目经理来协调不同成员之间的工作。这里的项目经理就是中介者模式中的中介者,他帮助降低了团队成员之间沟通的复杂性。

通俗解释

中介者模式是一种行为型设计模式,它的主要目的是通过引入一个中介者对象来降低多个对象或类之间的通信复杂性。在中介者模式中,各个对象不再直接相互通信,而是通过中介者对象来进行通信。这样,各个对象只需要知道如何与中介者交互,而无需了解其他对象的具体信息,从而降低了系统中的耦合度。

中介者模式的组成包括以下几部分:

  • 中介者(Mediator)接口:定义了各个同事对象之间交互的接口。
  • 具体中介者(Concrete Mediator):实现了中介者接口,并协调各个同事对象之间的交互。
  • 同事(Colleague)类:一个抽象类或接口,定义了同事对象的通用方法,通常包含对中介者对象的引用。
  • 具体同事(Concrete Colleague)类:实现了同事接口,并具体实现各种业务逻辑。

中介者模式的优点

  • 降低对象之间的耦合度:对象之间不需要显式地相互引用,降低了它们之间的依赖关系。
  • 提高系统的可维护性:由于对象之间的交互都通过中介者进行,因此修改一个对象时不需要修改其他对象。
  • 简化对象之间的交互:对象之间不需要了解对方的实现细节,只需要与中介者交互。

Python代码示例

以下是一个中介者模式的简单实现:

# 中介者接口
class Mediator:
    def send(self, message, colleague):
        pass


# 具体中介者
class ConcreteMediator(Mediator):
    def __init__(self):
        self._colleagues = []

    def add_colleague(self, colleague):
        self._colleagues.append(colleague)

    def send(self, message, colleague):
        for col in self._colleagues:
            if col != colleague:
                col.receive(message)


# 同事类
class Colleague:
    def __init__(self, mediator, name):
        self._mediator = mediator
        self.name = name

    def send(self, message):
        self._mediator.send(message, self)

    def receive(self, message):
        pass


# 具体同事类
class ConcreteColleague(Colleague):
    def receive(self, message):
        print(f"{self.name} received message: {message}")


# 客户端代码
if __name__ == "__main__":
    # 创建中介者
    mediator = ConcreteMediator()

    # 创建同事对象
    jack = ConcreteColleague(mediator, "Jack")
    Tom = ConcreteColleague(mediator, "Tom")
    Mery = ConcreteColleague(mediator, "Mery")

    # 将同事对象注册到中介者
    mediator.add_colleague(jack)
    mediator.add_colleague(Tom)
    mediator.add_colleague(Mery)

    # 同事之间通过中介者发送消息
    jack.send("Hello, Colleagues!")

在这个例子中,Mediator是中介者接口,ConcreteMediator是具体中介者类,负责协调同事对象之间的通信。Colleague是同事类,ConcreteColleague是具体同事类,实现了接收消息的方法。客户端代码创建了中介者和同事对象,并将同事对象注册到中介者中。当同事对象发送消息时,中介者会将消息转发给其他所有同事对象。

总结

中介者模式通过引入中介者对象,实现了对象之间通信的解耦,使得对象之间的交互更加简单、清晰。它适用于那些对象之间通信复杂、且难以跟踪和维护的场景。通过中介者模式,我们可以提高系统的模块化和可维护性。


http://www.kler.cn/a/287868.html

相关文章:

  • go 集成swagger 在线接口文档
  • lua实现雪花算法
  • 用PHP实现一个简单的http服务器
  • Python酷库之旅-第三方库Pandas(218)
  • 鸿蒙学习生态应用开发能力全景图-开发者支持平台(5)
  • 【Redis】Redis的一些应用场景及使用策略
  • Docker容器详细介绍
  • 传统CV算法——图像特征算法概述
  • 刷题记录(2)
  • 强化学习实践(一):Model Based 环境准备
  • Java入门:07.Java中的面向对象
  • DRF序列化_data传参
  • AI 通过python脚本自动化导出交易软件某一天的分笔成交明细
  • 0基础轻松玩转.NET Web API 8.0【CICD】项目实战
  • FPGA与高速ADC接口简介
  • 谷粒商城实战笔记-275~276-商城业务-订单服务-订单确认页完成
  • 两阶段最小二乘法2SLS和Heckman两阶段回归Stata代码(附示例数据)
  • Hadoop的HA配置与实现(ZooKeeper)
  • 华为设备默认密码
  • 记一次ssh伪终端修改为shell
  • 3.3 语法规则
  • 设计模式--享元模式
  • 春秋云镜(ZZCMS 2023)·CVE-2023-50104
  • 【GPT】Coze使用开放平台接口-【7】Dify 比较篇
  • Git —— 2、配置本地与远程免密仓库免密访问、实操创建本地仓库与上github新仓库关联
  • 龙芯+FreeRTOS+LVGL实战笔记(新)——01准备开发环境