Ich versuche, einen asynchronen Rahmen zu entwerfen und wollte wissen, was die Leute denken, sind die Vor- und Nachteile der Callback-Muster vs die Beobachter-Muster.
Callback pattern:
//example callback
public interface Callback{
public void notify(MethodResult result);
}
//example method
public class Worker{
public void doAsyncWork(Callback callback){
//do work
callback.notify(result);
}
}
//example observer pattern
public interface EventListener{
public void notify(MethodResult result);
}
public class Worker{
private EventListener listener;
public registerEventListener(EventListener listener){
this.listener=listener;
}
public void doAsyncWork(){
//do work
listener.notify(result);
}
}
Ich arbeite mit einem Framework, das beide Muster zu verwenden scheint. Das EventListener-Muster ist nicht das typische Muster, da es keine Liste von Listenern hat. Dies kann jedoch leicht implementiert werden, indem man einen CompositeListener erstellt, der seine eigene Semantik bezüglich der Priorität der Listener hat und wie die Verteilung von Ereignissen an jeden Listener gehandhabt werden soll, z.B. durch das Erzeugen eines neuen Threads für jeden Listener im Vergleich zu seriellen Benachrichtigungen. (Ich denke eigentlich, dass dies eine gute Idee ist, da es eine gute Trennung der Anliegen und ist eine Verbesserung auf die Standard-Beobachter/Listener-Muster).
Haben Sie eine Idee, wann Sie die beiden verwenden sollten?
Vielen Dank.