Observer/Observable & Grundlagen

Zenic

Mitglied
Also ich habe eine Klasse (Observable) welche 3 Collections enthält. Die Collections werden in unterschiedlichen Komponenten dargestellt. Ist es nun besser bei jeder Änderung alle registrierten Observer zu informieren und die unnötigen Benachrichtigungen hin zu nehmen oder sollte für jede Collection eine eigene Liste ihrer Observer geführt werden?

Zusätzlich habe ich noch eine grundlegende Frage zum Aufbau einer Applikation. Zwei dieser Collections führen Attribute der Objekte der dritten Collection. Da das Ganze nicht so leicht zu verstehe ist bzw. ich mich wohl nicht gut genug ausdrücke, hier ein Beispiel um es zu verdeutlichen.

Java:
Collection<Fahrzeug> fahrzeuge {Attribute von Fahrzeug: farbe, anzReifen, ...}
Collection<Color> farben
Collection<Integer> anzReifen

Die Farben bzw. Reifenanzahl werden später in JComboBoxen dargestellt, um nach ihnen zu filtern, löschen, etc. . Ist dieses Vorgehen richtig oder sollte man die Collections zur Laufzeit erstellen, also zum Beispiel: new JComboBox(fahrzeuge.getColors())? Wie verhält es sich hier mit Collections die auf jeden Fall benutzt werden (wie hier für ComboBox) und mit Collections die nur in speziellen Fällen benutzt werden?

danke
Zenic
 
Zuletzt bearbeitet:

Foermchen82

Top Contributor
Zu deiner ersten Frage: Es kommt darauf an!
Wenn die Collections zusammen hängen würde ich nur einen Listener machen.

Jedoch musst du dir überlegen, ob die 3 Collections geschickt sind, oder ob du eine ContainerKlasse machst mit der dann deine Listener aberbeiten können.

Zu deiner zweiten Frage: hier verstehe ich denn Sinn nicht ganz. Was genau hast du vor? Wie dynamisch sind deine Daten?
 

Zenic

Mitglied
Ich versuche mal den Punkt 2 noch besser zu erklären.

Hier nochmal die Struktur:
Java:
Collection<Fahrzeug> fahrzeuge {Attribute von Fahrzeug: farbe, anzReifen, ...}
Collection<Color> farben
Collection<Integer> anzReifen

Da ich mich mit Datenbanken noch nicht beschäftigt habe, arbeite ich mit CSV-Files und Collections. Die Collection "fahrzeuge" enthält alle eingelesen Fahrzeuge und die Collections "farben" und "anzReifen" enthalten alle schon vorhandenen Farben/Reifenanzahl (nur 1 mal). Beim Hinzufügen eines Fahrzeugs über die GUI wird dem User eine ComboBox mit allen schon vorhanden Farben (Collection: farben) angezeigt (selbes gilt für anzReifen). Wenn der User keine passende Farbe bzw. Reifenanzahl findet kann er eine neue hinzufügen.

Aktuell werden die Collections "farben" und "anzReifen" immer benötigt wenn die ComboBox dargestellt wird. Bei jedem hinzufügen in die Collection werden die Comboboxen (Observer) aktualisiert. Nun nochmal die Frage, machen diese Collections Sinn oder ist es nicht weniger effizient wenn ich eine Methode getColors() [das war in meinem 1. Posting falsch] schreibe. In diesem Fall muss bei jeder Combobox die komplette Fahrzeugcollection durchlaufen werden, je nach Größe kann das natürlich dauern.

Bsp.: für getColors()
Java:
public Collection<Color> getColors(){
	List<Color> list = new ArrayList<Color>();
	
	for(Fahrzeug f : fahrzeuge){
		if(!list.contains(f.getColor())){
			list.add(f.getColor());
		}
	}
	
	return list;
}

Edit: Zu Punkt 1 noch:
Ja die Collections hängen zusammen und ob sie geschickt sind wird sich wohl bei Frage 2 klären. Aber wie ist das mit der Containerklasse zu verstehen? Die Collections sind ja alle in einer Klasse und diese ist Observable, somit benachrichtige ich mit "notifyObservers()" aktuell alle Observer auf einmal.
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Grundsätzlich kann man, um die bereitsverwendeten Farben zu ermitteln über die vorhandenen Listenobjekte iterieren. Das sollte auch noch bei einer grösseren Anzahl an Objekten relativ flüssig laufen.
Schöner wäre es eventuell diese Farbliste dauerhaft zu halten und nur anzupassen, wenn Objekte aus der Liste entfernt, oder neue hinzugefügt werden.

Zum Thema benachrichtigung der Observer:
Grundsätzlich finde ich es nicht verkehrt, wenn alle Observer über Änderungen informiert werden, da eigentlich nur diese Wissen können welche Informationen für sie relevant sind.
Verwendest Du die Klassen aus java.util oder verwendest Du da ein eigenes Interface?
Bei ersterem könntest Du ja die notifyMethoden überschreiben und beim Aufruf der
Code:
update(Observable o, Object arg)
an den Observern ein entsprechendes Objekt mitgeben, das Aufschlüsse über die Art der Änderung zu lässt.
Bei letzterem (wäre meine bevorzugte Variante) könntest Du ja das Interface entsprechend anpassen und ein eigenens Event definieren, anhand dessen die Observer entscheiden können, ob sie die Änderungen interessieren oder nicht.
 

Zenic

Mitglied
Ich benutze Observable/Observer aus java.util. Hat diese Variante neben der fehlenden Möglichkeit des Ableitens, noch einen Nachteil gegenüber einem eigenen Interface?

Danke schonmal.
 

Michael...

Top Contributor
Hat diese Variante neben der fehlenden Möglichkeit des Ableitens, noch einen Nachteil gegenüber einem eigenen Interface?
Man kann doch von Observable erben? Oder hab ich das falsch verstanden?

Ansonsten kann dazu - mangels Erfahrung - nicht viel dazu sagen. Ich mache mir bei sowas immer eigene Interfaces, da ich lieber implementiere anstatt von Observable zu erben.
 

Zenic

Mitglied
Ich mache mir bei sowas immer eigene Interfaces, da ich lieber implementiere anstatt von Observable zu erben.
Genau das meinte ich mit "der fehlenden Möglichkeit des Ableitens", dass man von Observable ableiten muss und somit das Erben von einer anderen Klasse entfällt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M OOP Design Pattern - "extends Observable implements Observer" Allgemeine Java-Themen 0
G 2 Observable und ein Observer... Allgemeine Java-Themen 4
M MVC: PropertyChangeListener vs Java Observer & Observable Allgemeine Java-Themen 11
H Observer und Observable Allgemeine Java-Themen 3
G Observer / Observable oder doch lieber Message Broker? Allgemeine Java-Themen 2
D Observer/Observable Pattern vs. Listener-Konzept Allgemeine Java-Themen 4
N Observer/Observable der JAVA-API od. eigene Implementierung Allgemeine Java-Themen 2
lhein Tutorial zu Observer / Observable? Allgemeine Java-Themen 6
S Observable und Observer Allgemeine Java-Themen 10
G Frage zu (mehrfachem) Observable/Observer Allgemeine Java-Themen 2
GreenTeaYT Verstehe nicht ganz das Observer Pattern in einer Arrayliste? Allgemeine Java-Themen 3
S OOP JFrame als Observer eines JPanel Allgemeine Java-Themen 3
A Observer und Initialisierung Allgemeine Java-Themen 7
L Registrierung von Observer Allgemeine Java-Themen 4
S Wie kann ein Observer mehrere Observables beobachten? Allgemeine Java-Themen 9
R Observer Umsetzungsproblem Allgemeine Java-Themen 7
K Verständnisprobleme bei Observer-Pattern mit größerem Datenmodell Allgemeine Java-Themen 32
nrg Java Observer in SysTray laufen lassen / Console schließen Allgemeine Java-Themen 2
T Observer vs Listener Allgemeine Java-Themen 18
A Observer Pattern: feuern bei neuer Referenz-Zuweisung? Allgemeine Java-Themen 8
V Threads und Observer Allgemeine Java-Themen 18
U Verständnisschwierigkeiten Observer Pattern Allgemeine Java-Themen 18
B Observer vs Listener (GUI-Programmierung) Allgemeine Java-Themen 5
M Observer serialisieren Allgemeine Java-Themen 7
P Observer/TimerTask Allgemeine Java-Themen 3
P Observer Allgemeine Java-Themen 4
B Observer reagieren beim 2ten mal nicht Allgemeine Java-Themen 23
P Observer, nicht alle updates bearbeiten Allgemeine Java-Themen 2
P Abmelden beim Observer Allgemeine Java-Themen 4
N Observer Pattern Allgemeine Java-Themen 2
M Frage zu update Methode von Observer! Allgemeine Java-Themen 40
G problem mit dem observer pattern Allgemeine Java-Themen 3
G Frage zum Observer Pattern Allgemeine Java-Themen 4
A Observable BeansBinding an einer JTable bzw. JXTable Allgemeine Java-Themen 3
P fehlende Mehrfachvererbung logging.Handler impl. Observable Allgemeine Java-Themen 5
B Grundlagen: Pluginschnittstelle/Plugins Allgemeine Java-Themen 4
G JMenu Grundlagen Allgemeine Java-Themen 5
T Performance-Grundlagen Allgemeine Java-Themen 4
T Hilfe bei Grundlagen Javabeans und Eclipse Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben