• 行为型-中介者模式


    一、简介:

    中介者模式(Mediator Pattern)是一种行为型设计模式,它用于减少对象之间的直接交互,而是通过一个中介者对象来协调和管理对象之间的通信。中介者模式的主要目标是降低系统中对象之间的耦合度,使系统更易于维护和扩展。这个模式常常用于处理对象之间的复杂交互和通信。

    以下是中介者模式的关键参与者和工作原理:

    1. 中介者(Mediator):中介者是一个接口或抽象类,定义了对象之间的通信接口。中介者通常包括一组方法,用于注册、删除和通知参与者对象。

    2. 具体中介者(Concrete Mediator):具体中介者是中介者接口的实现,它负责协调和管理参与者对象之间的通信。具体中介者通常维护一个参与者对象的列表,可以处理不同参与者之间的消息传递和响应。

    3. 参与者(Colleague):参与者是与中介者对象交互的对象。它们不直接与其他参与者通信,而是通过中介者来传递消息和协调行动。

    中介者模式的工作原理如下:

    • 当一个参与者需要与其他参与者通信时,它将消息发送给中介者而不是直接发送给其他参与者。
    • 中介者接收到消息后,负责将消息传递给适当的参与者对象。
    • 参与者对象接收到消息后,可以根据消息的内容采取适当的行动。

    中介者模式的优点包括:

    1. 降低耦合度:中介者模式将对象之间的直接依赖关系降低到了最小,从而减少了系统中对象之间的耦合度,使得系统更易于维护和扩展。

    2. 集中控制:通过中介者,可以更好地集中控制对象之间的交互,使得交互逻辑更加清晰和可管理。

    3. 重用性:中介者模式可以促进参与者对象的重用,因为它们不依赖于具体的其他对象,只依赖于中介者接口。

    4. 简化通信:中介者模式可以简化对象之间的通信过程,因为它提供了一种统一的方式来处理消息传递和响应。

    中介者模式的一个常见应用是图形用户界面(GUI)框架,其中各种界面元素(如按钮、文本框、复选框)之间需要协调和响应用户输入,中介者模式可以用于管理它们之间的交互。此外,中介者模式也常用于多人在线游戏中,用于管理玩家之间的交互和通信。

    二、示例

    中介者模式可以用来减少对象之间的直接通信,将对象之间的交互行为集中管理,以降低系统的耦合度。下面我将通过一个简单的聊天程序的示例来说明中介者模式的应用:

    假设有一个简单的聊天程序,其中有多个用户,每个用户可以向其他用户发送消息。我们希望使用中介者模式来实现用户之间的消息传递,而不是让每个用户直接与其他用户通信。

    首先,我们定义中介者接口和具体中介者类:

    1. using System;
    2. // 中介者接口
    3. interface IChatMediator
    4. {
    5. void SendMessage(User user, string message);
    6. }
    7. // 具体中介者类
    8. class ChatMediator : IChatMediator
    9. {
    10. public void SendMessage(User user, string message)
    11. {
    12. Console.WriteLine($"{user.Name} 发送消息: {message}");
    13. }
    14. }

    然后,我们定义用户类,每个用户都持有一个中介者的引用,用于发送消息:

    1. // 用户类
    2. class User
    3. {
    4. public string Name { get; private set; }
    5. private readonly IChatMediator mediator;
    6. public User(string name, IChatMediator mediator)
    7. {
    8. Name = name;
    9. this.mediator = mediator;
    10. }
    11. public void SendMessage(string message)
    12. {
    13. mediator.SendMessage(this, message);
    14. }
    15. }

    最后,我们可以使用这些类来演示中介者模式的应用:

    1. class Program
    2. {
    3. static void Main()
    4. {
    5. IChatMediator mediator = new ChatMediator();
    6. User alice = new User("Alice", mediator);
    7. User bob = new User("Bob", mediator);
    8. User charlie = new User("Charlie", mediator);
    9. alice.SendMessage("大家好!");
    10. bob.SendMessage("你好,Alice!");
    11. charlie.SendMessage("欢迎加入聊天!");
    12. /*
    13. 输出:
    14. Alice 发送消息: 大家好!
    15. Bob 发送消息: 你好,Alice!
    16. Charlie 发送消息: 欢迎加入聊天!
    17. */
    18. }
    19. }

    在这个示例中,中介者模式允许用户对象通过中介者对象来发送消息,而不需要直接与其他用户通信。中介者对象负责将消息传递给正确的接收者,从而实现了用户之间的松耦合通信。这是一个简单的中介者模式示例,演示了如何通过中介者来管理对象之间的交互。
    再举个生活中的例子,租房子,房屋中介掌握所有房源信息,租客无需跟一个个房东去询问是否还有房源,可以直接告诉中介自己的需求,由中介来管理租客和房东的匹配。

  • 相关阅读:
    等保三级,多级等保认证的一点了解
    keras实现深度神经网络,keras实现卷积神经网络
    ACM-BCB2019 | SMILES-BERT:基于大规模无监督预训练的分子属性预测模型
    在R语言中进行缺失值填充:估算缺失值
    【毕业设计】基于stm32的车牌识别系统 - 物联网 单片机
    【洛谷 P1328】[NOIP2014 提高组] 生活大爆炸版石头剪刀布 题解(模拟+向量)
    操作系统实验 动态最高优先级调度算法(C++实现)
    Android Radio实战——静音操作(十九)
    云起无垠典型案例入选《2023软件供应链安全洞察》报告
    python中pydantic库
  • 原文地址:https://blog.csdn.net/sindyra/article/details/133051182