2009-08-07 46 views
0

我處於一種情況,我想將一個對象發送給多個處理程序,但是某些程序使用其他處理程序生成的數據。這聽起來很不清楚 - 自己讀一下,我不認爲我會得到我在說的 - 所以我會舉個例子。在事件處理程序之間共享數據?

比方說,我有以下幾點:

interface ChangeListener 
{ 
    public add_change(Change) 
    // ... 
} 

class ListenerA implements ChangeListener{...} 
class ListenerB implements ChangeListener{...} 

,並在實際的邏輯正在發生:

List changes = ... // populated from somewhere else 
List handlers = [new ListenerA(), new ListenerB()] 

foreach(change in changes) 
    foreach(handler in handlers) 
    handler.add_change(change) 

我的問題是什麼ListenerA將這樣做部分是創建一個URL我希望ListenerB有權訪問該URL(因此它可以使用它)。作爲一個具體的例子,ListenerA可以使用博客API來創建一個帖子,然後ListenerB可以發送一封包含該URL的郵件。

一個選擇是讓ListenerA使用新創建的URL向Change對象添加一個屬性,但我不確定我是否喜歡嘲笑該對象。另一種方法是簡單地按順序調用它們並傳入一個值(而不是循環),但我試圖保持這部分(發出更改)和嘗試並找出如何處理它們 - 以便將來添加一個ListenerC將需要添加一個對象到handlers列表中。

有關最佳方法的任何想法?

回答

1

聽起來像你想要的是聽衆B聽Listener A,而不是都聽同一個對象。基本上這將是一個鏈。對象發生變化並告訴它的監聽器(監聽器A)。監聽者A改變並告訴它的監聽者(監聽者B)。

由於B依賴於A,因此B應該在聽。