【译】使用. NET的中介模式

109 阅读4分钟

使用. NET的中介模式

在这篇文章中,我将展示如何使用.NET/C#来实现中介模式,以帮助编写松散耦合的代码。

简介

中介模式是编程中非常著名的模式,在这篇文章中,我们将看到它是什么,它给桌面带来了什么。一个简单的实现来理解我们可以想到使用它的一些情况。

  • 中介模式封装了对象如何相互作用通信。

  • 它促进了对象的松散耦合。

  • 它促进了多对多relationships/communication以及一对多。

  • 您可以将Mediator视为通信枢纽

例子

您可以将中介模式用于许多不同的用例。以下是中介模式可以帮助我们的一些requirements/situations。

  • 聊天室

  • Job/Task过程

  • 地理位置/控制中心

您可以在许多不同的编程语言中以各种方式实现这个模式。我将在使用Visual Studio代码的. NET Core控制台应用程序中使用C#,但是该设计可以很容易地移植到其他语言。

使用. NET事件实现(控制中心)

NET Events是实现中介模式的一种方法,首先从这个例子开始。稍后我们将看到另一个’使用Events实现的例子。

用例:接收车辆移动通知的控制中心。

img

我简化了要求,以下是我们想要实现的:

每当车辆移动时,它将向中央枢纽(中介)广播其位置。控制中心也将连接到枢纽,并将接收车辆广播的位置更新。

在现实世界中,车辆可能也想相互通信,或者控制中心个人想与所有驾驶员通信。但是只要你有了这个想法,你就可以把这个例子扩展到全新的层面。我们今天不会实现这些额外的需求,而是坚持我们最初的基本用例。

车辆实体

这里有一个基本的车辆实体,这是不言自明的。

img

所以,我们的车辆实体有一个Reg No属性和电流位置。有了这些属性,我们识别一辆车并告诉它的位置。然后是一个移方法,我们只是为它的位置设置一些随机值。

唯一剩下的就是将这个位置更新广播中央枢纽,为此,我们需要一个中介。现在,让我们来构建中介,然后更新移方法来连接东西。

调解员(中央枢纽)

如上所述,您可以将其视为一个中央通信枢纽。因此,对象将与该枢纽通信,并且也可以从该枢纽接收通知。这种结构保持事物松散耦合,易于维护复杂的通知。

img

同样,代码是简单的。中介类被实现为**单例,**这意味着在我们的应用程序中这个类只有一个实例。

控制中心将注册一个通用的内置Event Handler位置更改以接收位置更改通知。

如果你想知道什么是事件处理程序以及它们是如何工作的,我写了一些关于这些主题的帖子,可以查找这些帖子来刷新这些主题的一些背景。

这是我们的Location Change Event Args类:

img

我可以从这个类中通过车辆,因为所有这些信息都可以在车辆实体中获得,这也是可以的。

车辆广播位置

我们现在可以使用车辆类(移动方法)的中介来广播位置更新,如下所示:

img

在控制中心接收通知

这是我们的控制中心:

img

在构造函数中,我们将处理程序方法注册到Mediator引发的Event。

程序执行

以下是启动此演示的主要方法:

img

输出显示我们的中介在行动:

img

总结

中介模式是一种行为设计模式,在保持对象松散耦合的同时,它可以在messaging/notifications场景中极大地帮助我们。这种模式有许多不同的变体,我将在未来几天写下其中的一些变体。如果您有任何问题或评论,请告诉我。您可以从这个Github回购下载代码。

下次见,快乐编码。