Eine generische observer-pattern in Java
Den java.util.Observer
und java.util.Observable
sind hässlich. Sie benötigen die Art von Abgüssen, die Typ-Sicherheit-fans unangenehm auf, und man kann nicht definieren Sie eine Klasse, um ein Observer
mehrerer Dinge ohne hässliche casts. In der Tat, in "Wie weiß ich, dass das generische Objekt, das der Beobachter-Klasse sendet, die in Java?", ein Beantworter sagt, dass nur eine Art von Daten verwendet werden soll in jedem observer /observable.
Ich versuche zu machen, eine generische version des observer-pattern in Java zu bekommen, um beide dieser Probleme. Es ist nicht anders als der in der zuvor genannten post, aber diese Frage wurde offensichtlich nicht behoben (der Letzte Kommentar ist eine unbeantwortete Frage aus dem OP).
- Missing link in der letzten Zeile?
- Ich vermute, dass dies unmöglich ist ordentlich, ohne eine Sprache-Erweiterung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich lieber mit einer annotation, so ein Zuhörer hören können, um verschiedene Arten von Veranstaltungen.
Drucke
Interface
-basiert, man fühlt sich wie eine bessere Beschreibung der intention des Kodex. Daran interessiert zu wissen, was Sie denken.Observer.java
Observable.java
Hoffentlich wird nützlich sein, um jemanden.
if(!contains) { return; } then add()
wenn Sie könnten nurif (contains) { add(); }
. Außerdem sollten Sie einen text hinzufügen, um IhreIllegalArgumentException
if(contains)
ersten mal undif(!contains)
die zweite Runde. Da ich lieber den Stil, das ist alles. Es macht keinen Unterschied. Und, ja, ich werde Bearbeiten Sie die Antwort mit prall-text für die Ausnahme.!
ist immer noch an der falschen Stelle. 🙂Ein modernes update: ReactiveX ist eine sehr gute API für die asynchrone Programmierung basiert auf dem Observer-Muster, und es ist vollständig generisch. Wenn Sie mit Observer/Observable zu "streamen" von Daten oder Ereignissen, die von einer Stelle in Ihrem code zu einem anderen, sollten Sie auf jeden Fall hinein.
Es basiert auf der funktionalen Programmierung, so dass es aussieht sehr elegant mit Java 8 lambda-syntax:
Einmal habe ich eine generische Implementierung des observer-Musters für Java mit dynamische proxies. Hier ist ein Beispiel wie es verwendet werden könnte:
Den full-source-code von AbstractObservable ist auf pastebin. Weg zurück ich darüber gebloggt, wie es funktioniert, ein bisschen mehr detail, auch unter Bezugnahme auf Verwandte Projekte.
Jaana schrieb eine interessante Zusammenfassung der verschiedenen Ansätze, auch den Kontrast zu dem dynamischen proxy-Ansatz mit anderen. Viel Dank natürlich geht zu Allain Lalonde aus, die ich die ursprüngliche Idee,. Ich habe noch nicht ausgecheckt PerfectJPattern, aber es könnte nur enthalten eine stabile Implementierung des observer-Musters; zumindest scheint es wie eine ausgereifte Bibliothek.
Versuchen, Klasse EventBus von Guave.
Können Sie erklären, ein Beobachter so:
Neuen ein EventBus wie diese:
Und registrieren Beobachter so:
Letzten Benachrichtigen Beobachter wie:
Fand ich eine ähnliche Anfrage, aber es war eher auf codereview.
Ich denke, es ist erwähnenswert es hier.
Original Antwort von codereview stackexchange