各サブスクライバーがいくつかのタイプのイベントを待機するパブリッシュ/サブスクライブシステムでは、単純なスイッチよりも優れた処理ソリューションがありますか?
Pub1とPub2の2つのパブリッシャーがあるとしましょう。Pub1は2種類のイベントPub1-eventAとPub1-eventBを送信します。これは、Pub2と同じPub2-eventAとPub2-eventBです。
一方、Pub1とPub2のイベントをサブスクライブするクライアントSub1があります。
Sub1リスナーでこれらのイベントをどのように処理しますか?
ここにいくつかの可能性:
1つのリスナー、1つの大きなスイッチ(保守が難しい):
Listener{
HandleEvent(event){
if(event.type == Pub1-eventA)
Action1.execute();
if(event.type == Pub1-eventB)
Action2.execute();
if(event.type == Pub2-eventA)
Action3.execute();
if(event.type == Pub2-eventB)
Action4.execute();
}
}
1つのリスナーとアソシエーションマップ:
Map<event-type, Action> ActionMap
Listener{
Action = ActionMap[event-type]
Action.execute();
}
イベントタイプごとに1つのリスナー:
ListenerPub1-eventA{ check(event-type); Action1.execute(); }
ListenerPub1-eventB{ check(event-type); Action2.execute(); }
ListenerPub2-eventA{ check(event-type); Action3.execute(); }
ListenerPub2-eventB{ check(event-type); Action4.execute(); }