行为型-中介者模式

news/2024/6/17 3:37:21 标签: 中介者模式, c#

一、简介:

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

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

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

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

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

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

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

中介者模式的优点包括:

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

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

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

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

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

二、示例

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

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

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

using System;

// 中介者接口
interface IChatMediator
{
    void SendMessage(User user, string message);
}

// 具体中介者类
class ChatMediator : IChatMediator
{
    public void SendMessage(User user, string message)
    {
        Console.WriteLine($"{user.Name} 发送消息: {message}");
    }
}

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

// 用户类
class User
{
    public string Name { get; private set; }
    private readonly IChatMediator mediator;

    public User(string name, IChatMediator mediator)
    {
        Name = name;
        this.mediator = mediator;
    }

    public void SendMessage(string message)
    {
        mediator.SendMessage(this, message);
    }
}

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

class Program
{
    static void Main()
    {
        IChatMediator mediator = new ChatMediator();

        User alice = new User("Alice", mediator);
        User bob = new User("Bob", mediator);
        User charlie = new User("Charlie", mediator);

        alice.SendMessage("大家好!");
        bob.SendMessage("你好,Alice!");
        charlie.SendMessage("欢迎加入聊天!");

        /*
        输出:
        Alice 发送消息: 大家好!
        Bob 发送消息: 你好,Alice!
        Charlie 发送消息: 欢迎加入聊天!
        */
    }
}

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


http://www.niftyadmin.cn/n/5057527.html

相关文章

Spark SQL案例【电商购买数据分析】

数据说明 Spark 数据分析 (Scala) import org.apache.spark.rdd.RDD import org.apache.spark.sql.{DataFrame, SparkSession} import org.apache.spark.{SparkConf, SparkContext}import java.io.{File, PrintWriter}object Taobao {case class Info(u…

tortoiseSVN树冲突解决方案

方案一: 手动导出 trunk 上的文件(夹),把本地目录文件(夹)删了并替换成 trunk上的,再点击测试合并方案二: 如果执行了方案一还是冲突,确认本地和trunk文件一致后,可以跳过冲突的revision

rust生命期

一、生命期是什么 生命期,又叫生存期,就是变量的有效期。 实例1 {let r;{let x 5;r &x;}println!("r: {}", r); }编译错误,原因是r所引用的值已经被释放。 上图中的绿色范围’a表示r的生命期,蓝色范围’b表示…

翻墙工作?承德程序员被罚款 108 万元!

近年来,随着互联网的快速发展,远程办公成为越来越多公司和个人的选择。很多国外的远程办公公司也在中国和其他各个国家招收员工。 然而,最近一则承德程序员因远程办公被罚款100万的新闻引起了广泛关注。这个程序员给一家软件公司打工&#x…

C++学习第二十六天----内联函数与引用变量

1.内联函数 可以举个例子说明内联函数与常规函数的区别:比如我们去吃饭,常规函数代码本身消耗时间并不长,时间主要浪费在了去跳转执行代码的路上,就好像吃饭花了10分钟,来回路上各花了1个小时一样。 内联函数就是在每个…

RabbitMQ之发布确认高级

RabbitMQ之发布确认高级 一、发布确认 SpringBoot 版本1.1 确认机制方案1.2 代码架构图1.3 配置文件1.4 添加配置类1.5 消息生产者1.6 回调接口1.7 消息消费者1.8 结果分析 二、回退消息2.1 Mandatory 参数2.2 消息生产者代码2.3 回调接口2.4 结果分析 三、备份交换机3.1 代码架…

对日项目工作总结

从18年8月到23年中秋节,目前已经入职主营对日车载项目的公司满5年了,一般来说,在一家公司工作工作超过3年,如果是在比较大型以及流程规范的公司,那么该公司的工作流程,工作思维会深深地烙印在该员工的脑海中…

NPDP产品经理认证怎么报名?考试难度大吗?

PMDA(Product Development and Management Association)是美国产品开发与管理协会,在中国由中国人才交流基金会培训中心举办NPDP(New Product Development Professional)考试,该考试是产品经理国际资格认证…