Listeners: bonne manière de programmer?
Salut,
Pour faire mes listeners, je fais toujours comme ça:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class MaClass {
private Collection<XListener> listeners = new ArrayList<XListener>();
...
public void addXListener(XListener listener) {
listeners.add(listener);
}
public void removeXListener(Listener listener) {
listeners.remove(listener);
}
protected void fireXXX(...) {
for(XListener listener : listeners)
listener.XXX(...);
}
} |
Mais je viens de découvrir que dans l'API (et c'est ce qui est utilisé par les listeners de l'API standard), il y a une classe EventListenerList
ce qui donnerait:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class MaClass {
private EventListenerList listenerList = new EventListenerList();
...
public void addXListener(XListener listener) {
listenerList.add(XListener.class, listener);
}
public void removeXListener(XListener listener) {
listenerList.remove(XListener.class, listener);
}
protected void fireXXX(...) {
Object[] listeners = listenerList.getListenerList();
/* elle est bizarre cette boucle, mais bon c'est dans la javadoc */
for (int i = listeners.length-2; i>=0; i-=2) {
if(listeners[i]==XListener.class) {
((FooListener)listeners[i+1]).fooXXX(...);
}
}
} |
Laquelle est la "meilleure"? (et pourquoi?)