Próbuję zaprojektować strukturę asynchroniczną i chciałbym wiedzieć, co ludzie uważają za plusy i minusy wzoru wywołania zwrotnego w porównaniu do wzorca obserwatora.Callback/Command vs. EventListener/Observer Pattern
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);
}
}
Pracuję w ramach, który wydaje się korzystać z obu tych wzorów. Wzorzec EventListener nie jest typowym wzorcem, ponieważ nie ma listy detektorów. Można to jednak łatwo zaimplementować, tworząc komponent CompositeListener, który ma własną semantykę dotyczącą priorytetu słuchaczy i sposób obsługi dystrybucji zdarzeń dla każdego detektora, np. spawnowanie nowego wątku dla każdego detektora w porównaniu do powiadomień seryjnych. (Właściwie uważam, że to dobry pomysł, ponieważ jest to dobry rozdział obaw i stanowi ulepszenie standardowego wzorca obserwatora/słuchacza).
Jakieś przemyślenia na temat tego, kiedy należy ich używać?
Thxs.
Aby uprościć oddzwanianie, zalecamy korzystanie z funkcji pierwszej klasy. więc jest to po prostu 'public void doAsyncWork (funkcja oddzwaniania)' – Raynos
Jestem nowy w obu wzorcach projektowych i bardzo się pomyliłem z próbkami kodu. Jesteś pewien, że to poprawne demo tych dwóch wzorów, szczególnie wzorca Obserwatora? Dla mnie sposób, w jaki je zapisałeś, nie ma znaczenia. Nie zrozum mnie źle. Szczerze doceniam twoje pytanie, ponieważ mam to na myśli. Po prostu chcesz to wyprostować. Dzięki! – jiu9x9uij