特定のイベントの処理とデータの生成に基づくシステムを開発しようとしています。各イベントには(おそらく)いくつかの異なるフィールドが含まれ、各リスナーはそれらのいくつかを処理します。私は次の2つのアプローチを念頭に置いています
イベント生成クラス内で、複数のイベントリスナーを登録します。各リスナーは、イベントの特定のフィールドの1つの特定の値をリッスンします。たとえば、次のようになります。
public class MicroListener implements Listener { public void processEvent(Event e){ if(e.getName().equals(registeredName)) { ... } }
処理はオブジェクト自体の中で行われ、イベントの集中処理はなく、各オブジェクトが情報を処理できるようにするため、これは魅力的です。不利な点は、おそらく致命的ですが、各イベント(数十万のうち)をすべてのリスナーにブロードキャストする必要があるという事実ですが、実際にはごく一部しかブロードキャストされません。それはおそらく長期的には素晴らしいパフォーマンスヒットを生み出すでしょう...
一元化されたリスナー。すべてのイベントをリッスンして処理し、対応するイベントプロセッサに処理を委任します。次に例を示します。
public class CentralListener implements Listener { Map<String, Processor> processorsByName; public void processEvent(Event e){ processorsByName.get(e.getName()).process(e); } }
これは高速ですが、イベントの他の部分(イベントIDなどをチェックするプロセッサなど)に対して個別のマップまたはプロセッサのコレクションが必要になります。これは、アプローチ1には当てはまりません。これは、単に別のリスナーのセットを生成して登録するためです。イベント生成クラスでそれらを。
あなたたちはこれらのどれについてどう思いますか?それらは理にかなっていますか、それともまったく異なるsthについてアドバイスしますか?