使用. NET的中介模式
在这篇文章中,我将展示如何使用.NET/C#来实现中介模式,以帮助编写松散耦合的代码。
简介
中介模式是编程中非常著名的模式,在这篇文章中,我们将看到它是什么,它给桌面带来了什么。一个简单的实现来理解我们可以想到使用它的一些情况。
-
中介模式封装了对象如何相互作用和通信。
-
它促进了对象的松散耦合。
-
它促进了多对多relationships/communication以及一对多。
-
您可以将Mediator视为通信枢纽。
例子
您可以将中介模式用于许多不同的用例。以下是中介模式可以帮助我们的一些requirements/situations。
-
聊天室
-
Job/Task过程
-
地理位置/控制中心
您可以在许多不同的编程语言中以各种方式实现这个模式。我将在使用Visual Studio代码的. NET Core控制台应用程序中使用C#,但是该设计可以很容易地移植到其他语言。
使用. NET事件实现(控制中心)
NET Events是实现中介模式的一种方法,首先从这个例子开始。稍后我们将看到另一个’使用Events实现的例子。
用例:接收车辆移动通知的控制中心。
我简化了要求,以下是我们想要实现的:
每当车辆移动时,它将向中央枢纽(中介)广播其位置。控制中心也将连接到枢纽,并将接收车辆广播的位置更新。
在现实世界中,车辆可能也想相互通信,或者控制中心个人想与所有驾驶员通信。但是只要你有了这个想法,你就可以把这个例子扩展到全新的层面。我们今天不会实现这些额外的需求,而是坚持我们最初的基本用例。
车辆实体
这里有一个基本的车辆实体,这是不言自明的。
所以,我们的车辆实体有一个Reg No属性和电流位置。有了这些属性,我们识别一辆车并告诉它的位置。然后是一个移动方法,我们只是为它的位置设置一些随机值。
唯一剩下的就是将这个位置更新广播到中央枢纽,为此,我们需要一个中介。现在,让我们来构建中介,然后更新移动方法来连接东西。
调解员(中央枢纽)
如上所述,您可以将其视为一个中央通信枢纽。因此,对象将与该枢纽通信,并且也可以从该枢纽接收通知。这种结构保持事物松散耦合,易于维护复杂的通知。
同样,代码是简单的。中介类被实现为**单例,**这意味着在我们的应用程序中这个类只有一个实例。
控制中心将注册一个通用的内置Event Handler位置更改以接收位置更改通知。
如果你想知道什么是事件处理程序以及它们是如何工作的,我写了一些关于这些主题的帖子,可以查找这些帖子来刷新这些主题的一些背景。
这是我们的Location Change Event Args类:
我可以从这个类中通过车辆,因为所有这些信息都可以在车辆实体中获得,这也是可以的。
车辆广播位置
我们现在可以使用车辆类(移动方法)的中介来广播位置更新,如下所示:
在控制中心接收通知
这是我们的控制中心:
在构造函数中,我们将处理程序方法注册到Mediator引发的Event。
程序执行
以下是启动此演示的主要方法:
输出显示我们的中介在行动:
总结
中介模式是一种行为设计模式,在保持对象松散耦合的同时,它可以在messaging/notifications场景中极大地帮助我们。这种模式有许多不同的变体,我将在未来几天写下其中的一些变体。如果您有任何问题或评论,请告诉我。您可以从这个Github回购下载代码。
下次见,快乐编码。