我有一个可观察者(来自观察者/可观察模式),具有已注册的侦听器列表。
事件发生时,通知代码会执行以下操作:

if(event == TYPE_A){
  for(Listener l:listeners){
       l.fireEventA();
  }
else if(event == TYPE_B){
  for(Listener l:listeners){
       l.fireEventB();
  }
if(event == TYPE_C){
  for(Listener l:listeners){
       l.fireEventC();
  }


我想知道这是我能做的最好的还是应该避免在通知中使用if-else?我该如何改善?

最佳答案

如何重构您的解决方案,以便您将是否触发监听器的责任推给监听者:

类Listener {
私有EventType eventType;

   public Listener(EventType eventType) {
       this.eventType = eventType;
   }

   public void fireEvent(EventType eventType) {
       if(this.eventType == eventType) {
          ...do stuff
       }
   }


然后客户端代码如下所示:

..setup...
listeners.add(new Listener(TYPE_A);
listeners.add(new Listener(TYPE_B);
..and so on


然后,当您需要触发事件时:

for(Listener l:listeners){
   l.fireEvent(event);
}


这是您的选择吗?

10-06 14:32