Eigenes Message Center erstellen

Thallius

Top Contributor
Hallo,

ich habe ein sehr großes Projekt das aus vielen Klassen besteht die zum großen Teil auf die selben Daten zugreifen. Nehmen wir mal ein fiktives Beispiel:

Man kann zwei Fenster öffnen, die beide die Daten Einer Firma darstellen. Das eine die Aufträge, das andere die Bestellungen etc. Beide Fenster zeigen nun auch die Daten des Kunden der zum Auftrag, bzw der Bestellung gehören. Nun werden in einem dritten Fenster die die Aufträge in einer Timeline angezeigt und in einem vierten die Personen-Datails. Jetzt änder man in diesem vierten Fenster die Lieferadresse des Kunden. Nun sollten sich natürlich auch in allen anderen Fenstern die Adressen des Kunden ändern.

Klar kann man das alles über Listener machen. Aber ich finde das Konzept dann extrem unübersichtlich und man schreibt entweder sehr viele kleine Listener oder man hat einen großen sehr mächtigen Listener und damit in allen Listenern sau viele unnötige Methoden die man eigentlich gar nicht braucht

Von anderen Programmiersprachen kennen ich das Prinzip der Messages oder Notifications. Das finde ich wesentlich eleganter.

Prinzipiell sieht das also so aus:

Ich erstelle eine Singleton Klasse NotificationCenter. Dieser kann man eine Notification schicken. Die Notification hat einen unqiue Identifier (Meist einen Namen) und wenn nötig eine Collection von Objecten.

Alle Klassen die sich für eine bestimmte Notification interessieren, melden sich bei dem Center als Observer an. Bekommt das Center nun eine Notification, dann schaut es wer sich alles dafür registriert hat und schickt die Notification entsprechend weiter.

Auf diese Art und weise sind die Klassen sauber entkoppelt und hängen nicht über tausend Listener miteinander zusammen.

Das Problem ist, dass das Versenden der Notifications ja über einen zweiten Thread gehen muss, da sonst der aufrufende Task ja geblockt wäre. Wenn ich aber die Notification über einen zweiten Thread verschicke, dann kann der Observer u.U. versuchen eine UI Aktion zu starten, was aber nicht geht das er nicht mehr im MainThread läuft.

Gibt es schon irgendwas fertiges da in Java? Ich habe nichts gefunden. Oder gibt es was anderes das dem Konzept entspricht? Oder wenn nicht, wie löse ich mein Problem?

Gruß

Claus
 

nvidia

Bekanntes Mitglied
Der Sammelbegriff dafür lautet Publish-Subscribe, das Observerpattern (synchrone Listener) ist eine mögliche Ausprägung davon. Derzeit wird da aber eine andere Sau durchs Dorf getrieben die sich Reactive Programming oder gemischt mit funktionalen Ansätzen Functional Reactive Programming nennt. Ein Vertreter für diese "Reactive"-Schiene ist bspw. RxJava.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
S Eclipse Github Projekt in eigenes Projekt einbinden und nutzen Allgemeine Java-Themen 13
B eigenes Consumer Interface Allgemeine Java-Themen 0
M eigenes Seekarten-Tool (oder PlugIn?) Allgemeine Java-Themen 2
Z LanguageTool in eigenes GUI einbetten Allgemeine Java-Themen 0
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
O log4j - eigenes Log für einzelne Klasse Allgemeine Java-Themen 5
M Eigenes Eventsystem Allgemeine Java-Themen 2
T Code durch eigenes Frame pausieren (ähnlich JDialog) Allgemeine Java-Themen 4
J Swing Eigenes Button-design Allgemeine Java-Themen 2
S import meine.eigenes.import Allgemeine Java-Themen 6
I Eigenes Mail-Programm schreiben Allgemeine Java-Themen 21
N eigenes Bildformat Allgemeine Java-Themen 2
J Eigenes Produkt Upgrade / Update-fähig halten? Allgemeine Java-Themen 16
M Erstes eigenes Projekt Allgemeine Java-Themen 5
D Simples eigenes Logfile Allgemeine Java-Themen 18
J Eigenes Objekt sichern Allgemeine Java-Themen 9
R Eigenes Objekt - clone() Allgemeine Java-Themen 2
G eigenes ChangeEvent Allgemeine Java-Themen 4
P Installationsroutine für eigenes Java-Programm Allgemeine Java-Themen 3
G eigenes Actionevent Allgemeine Java-Themen 8
M Eigenes Java-Server-Programm unter Linux steuern? Allgemeine Java-Themen 13
G eigenes dateiformat als zip Allgemeine Java-Themen 2
M Eigenes Synchronisationstool? Allgemeine Java-Themen 2
E Wie: Eigener Listener, eigenes Event (möglichst einfach) Allgemeine Java-Themen 29
ToNyXXL Als Mauszeiger eigenes Bild verwenden! Allgemeine Java-Themen 3
S eigenes Zahlensystem? Allgemeine Java-Themen 5
K Eigenes Protokoll (abc:[url]http://abc.de[/url]) Allgemeine Java-Themen 2
A Eigenes jar file in projekt einbinden Allgemeine Java-Themen 4
B eigenes look and feel Allgemeine Java-Themen 11
K eigenes Tool jar - maskieren der Methoden Allgemeine Java-Themen 3
T eigenes Browser Plugin Allgemeine Java-Themen 6
T Eigenes Installationsprogramm Allgemeine Java-Themen 17
C javax.mail.Message message.setreplyto() null setzen (keine replyto Adresse) Allgemeine Java-Themen 25
J Message Box soll bei bestimmter Zeit angezeigt werden Allgemeine Java-Themen 19
J IndexOutOfBoundsException bei der Nutzung der Klasse Message von mime4j Allgemeine Java-Themen 5
F Message Queue Tipps Allgemeine Java-Themen 3
T @NotBlank verwendet nicht message aus .property-File Allgemeine Java-Themen 4
G Observer / Observable oder doch lieber Message Broker? Allgemeine Java-Themen 2
V Variable vom Typ String zum Typen "Message" konve Allgemeine Java-Themen 2
G Scanner.hasNext() beendet den Thread ohne Message Allgemeine Java-Themen 4
TheJavaKid message auslesen Allgemeine Java-Themen 5
G JavaMail - Message vom Server, wie abfragen? Allgemeine Java-Themen 2
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Klassen Info-Center - Namensänderung & permanentes "behalten" Allgemeine Java-Themen 5
I OSX Notification Center Allgemeine Java-Themen 1
M Grösse von BorderLayout.CENTER ermitteln Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben