2014-03-30 35 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