现实世界中使用“中介者模式”的一个例子是什么?

11

请给出一个在现实世界中使用"中介者模式"的用例实例。


交通控制系统 - kris
8个回答

7
出租车电台是中介者模式的一个例子。出租车司机与中介者(出租车电召中心)通信,而不是相互之间直接交流。
当顾客需要一辆出租车时,他会拨打出租车电召中心。所有出租车都配备了GPS设备,可以告知出租车当前所在位置,并且有一个中央信息系统可以告知哪辆出租车能够为顾客提供服务。电召中心将联系离顾客最近、可用的出租车,并将其派往服务顾客。
请查看https://github.com/dstar55/100-words-design-patterns-java#Mediator

7

中介者模式是一种添加第三方对象以控制(2个或更多)对象之间交互的方法。

最简单的例子是聊天室,在这里你可以看到一个ChatRoom对象控制着2个(或更多)User对象之间的交互。实际上,如果你看到像Facebook这样的Web应用程序,它会为每个打开的聊天框创建一个Websocket。因此,Websocket与中介者(服务器)和客户端进行通信。当进行群聊时,每个客户端都使用专用Websockets与服务器同步。


3
很好的并行处理,但“中介者”是对象设计模式,因此实际示例应该涉及对象而不是服务器和套接字,在我看来。 - Rinke
据我所知,模式是一个更抽象的模型。我们使用模式所做的实际上是“一种”实现而不是“唯一”的实现。您可以阅读Matt为我的一个问题提供的这个很好的答案:)) https://dev59.com/Npfga4cB1Zd3GeqPA8hg#37671309 - Supun Wijerathne
2
当然,但这是一种对象设计模式,而不是服务设计。我确实看到了您如何概括原始模式,并且我喜欢您的答案。我只是想指出,这不是GoF书中描述的模式的实现。 - Rinke
@Rinke,我同意这一点,它并不是GoF书中所描述的。:)) - Supun Wijerathne

4

四人帮喜欢从GUI中提取例子,因此他们的例子自然围绕着窗口、按钮、文本框、列表框等。如果每个小部件都直接与其他小部件通信,结果将是一个通信的蜘蛛网。限制每个小部件只与单个中介者通信简化了通信模式。也可以查看这个答案,其中有类似的解释。

对于四人帮之外的例子,对比中介者和外观的问题的前两个答案提到中介者作为记录的有效模式。此外,Spring Guru提到了Spring Framework中的一个例子。

在Spring MVC中,通过Spring MVC如何与控制器一起使用调度程序Servlet,展示了中介者模式的很好的例子。


1

别忘了 Kafka,它也是一个很好的例子。


1

可以将消息服务称为中介者模式的一种实现。

假设我想让Java应用程序中的两个组件通过JMS进行通信 - 组件A发布包含某种指令的消息到JMS提供程序;组件B订阅该JMS提供程序以检索消息并执行指令。组件A通过中介者与组件B进行通信。

这里有更多示例在这里


1
一个人可以说,ESB(企业服务总线)本质上是中介者模式的大规模应用。

0

空中交通管制系统就是其中之一。

这种模式在现实生活中被广泛使用,当你想要避免多对多的通信时。

另一个现实世界的例子,在大多数印度婚礼中,有一个调解人在新郎和新娘之间进行沟通,否则会有许多人互相交流不同的事情,没有人知道完整的细节。因此,当有许多参与者想要讨论一个主题并避免许多通信时,调解器模式是有用的。

Facebook或任何社交网络网站,许多人聚集在一起谈论一个话题,所以在这个Facebook/社交网络网站扮演调解角色。


0

另一个很好的例子是RabbitMQ开源消息代理库,它作为连接多个客户端/应用程序的“中介者”。

在这里,客户端或应用程序不知道谁将消耗所有消息。 RabbitMQ充当中介并将消息发布给已订阅的客户端。


中介者不是消息代理。 "中介者拓扑结构对于需要多个步骤并需要一定程度的编排来处理事件的情况非常有用。" “代理拓扑结构与中介者拓扑结构不同之处在于没有中央事件中介者;相反,消息流通过轻量级消息代理(例如ActiveMQ、HornetQ等)以链式方式分布在事件处理器组件中。” https://www.oreilly.com/library/view/software-architecture-patterns/9781491971437/ch02.html - User128525

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接