2009-08-07 59 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应该在听。