2009-08-07 6 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でメールを送信することができます。

1つのオプションは、ListenerAに、新しく作成されたURLでChangeオブジェクトにプロパティを追加することですが、オブジェクトについては気にしません。もう1つは、単にそれらを順番に呼び出すことであり、値を渡すことです(ループを繰り返すのではなく)。しかし、私はこの部分(変更を送信する)と試したリスナーの間の懸念を完全に分離しようとしていますそれらを処理する方法を理解する - 将来、ListenerCを追加するにはすべて、handlersリストにオブジェクトを追加することになります。

最良のアプローチに関するアイデアはありますか?

答えて

1

リスナーBは、同じオブジェクトを聴いているのではなく、リスナーAを聴いています。基本的にはチェーンになります。オブジェクトが変更され、それがリスナー(リスナーA)に伝えられます。リスナーAはリスナー(リスナーB)を変更して通知します。

BはAに依存しているので、Bはリスニングする必要があります。

関連する問題