我有一个可观察者(来自观察者/可观察模式),具有已注册的侦听器列表。
事件发生时,通知代码会执行以下操作:
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);
}
这是您的选择吗?