我觉得Messenger
不是纯粹的Event Aggregator
也不是纯粹的Mediator
。如果我要在其中之一中进行选择,我会选择Mediator
。我们来做一下比较。
信使
Messenger 有助于在松散耦合的对象之间发送消息。有兴趣接收消息的消费者可以注册这些消息。生产者可以使用 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);
这意味着信使中有一些逻辑来确定应将消息发送给哪些订阅者。
事件聚合器
的目的事件聚合器就是简单地监听来自许多对象的事件。它也可用于聚合事件。这意味着事件聚合器订阅来自发布者的事件,但将自己的事件发送给其订阅者。
Mediator
本质是中介者模式是“定义一个对象来封装一组对象如何交互”,这意味着Mediator不仅可以接收来自发布者的消息并将其发送给订阅者,还可以对接收到的消息执行逻辑。
So?
在我看来Messenger
不是事件聚合器,因为它的目的不是简化事件处理。另一方面,我不认为这是一个Mediator
要么是因为它的目的不是决定对象如何交互,也不是在通信上强加逻辑。如果我选择在哪里,我会说 Messenger 是一个中介者,因为它有一些通过通道发送消息的逻辑。