2014-03-30 36 views

回答

12

我认为Messenger不是纯粹的Event Aggregator也不是纯粹的Mediator。如果我在其中一个之间进行选择,我会选择Mediator。让我们做一个比较。

信使

信使便于发送松耦合对象之间的消息。有兴趣接收消息的消费者可以注册这些消息。生产者可以使用Messenger广播消息:

void Register<TMessage>(object recipient, Action<TMessage> action); 
void Send<TMessage>(TMessage message); 

如果消费者仅在邮件通过一定的渠道有兴趣的,消费者应该提供一个令牌,同时注册。生产者应该使用相同的标记通过该通道发送消息:

void Register<TMessage>(object recipient, object token, Action<TMessage> action); 
void Send<TMessage>(TMessage message, object token); 

这意味着信使中有一些逻辑确定哪个订户的消息应当被发送。

事件汇聚

Event Aggregator的目的是简单地听着从很多对象的事件。它也可以用来聚合事件。这意味着Event Aggregator会订阅来自发布者的事件,但将自己的事件发送给订阅者。

中保

Mediator Pattern的本质是“定义封装如何一组对象的交互的对象”。这意味着中介不仅接收来自发布消息,并将其发送到用户,但可以执行接收到的消息的逻辑也是如此。

那么,

在我看来,Messenger不是一个事件聚合器,因为它的目的不是为了简化处理事件。另一方面,我不认为这是一个Mediator,要么是因为它的目的不是要决定物体如何相互作用,而是要强调通信的逻辑。如果我在哪里选择,我会说Messenger是一个中介,因为它有一个通过通道发送消息的小逻辑。

+0

实施更受Mediator模式影响,提供发送消息的专用渠道。尽管为了“聚合”消息通信而提供频道的使用相同类型的通信更加情景化,并且没有部分来定义对象如何通过Messenger交互或强加这种交互的逻辑。另一方面,基础实施(如果'代币'未被考虑)完全符合提议的聚合模式。总结而不是被迫选择:)“Messenger是Mediator&Aggregator模式的混合,兼容和合并实现”。 – Jsinh