在每个订阅者等待多种类型事件的发布-订阅系统中,有没有比简单切换更好的处理解决方案?
假设我们有 2 个发布者,Pub1 和 Pub2;Pub1 发送 2 种事件 Pub1-eventA 和 Pub1-eventB,Pub2 相同,分别为 Pub2-eventA 和 Pub2-eventB
另一方面,我们有一个订阅 Pub1 和 Pub2 事件的客户端 Sub1;
您将如何管理在 Sub1 侦听器中处理这些事件?
这里有一些可能性:
一个听众,一个大开关(难以维护):
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();
}
}
一个监听器和一个关联图:
Map<event-type, Action> ActionMap
Listener{
Action = ActionMap[event-type]
Action.execute();
}
每个事件类型一个监听器:
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(); }