Verständnisschwierigkeiten Observer Pattern

Status
Nicht offen für weitere Antworten.
U

Unregistriert

Gast
Hi!

Ich arbeite gerade das Head First Design Patterns durch und bin beim Observer.

Dort ist ein Beispiel angegeben, wo von einer Wetterstation die Wetterdaten an drei verschiedene Anzeigeobjekte gegeben werden sollen. Das ist mir auch alles recht verständlich. Nur eines erschließt sich mir nicht: Worin liegt der große Vorteil?

Wenn ich das auf das Beispiel beziehe, könnte man doch auch sagen, man will die Wetterdaten einmal pro Sekunde aktualisieren und setzt einen Timer auf.
Die Anzeigeobjekte könnten sich die Wetterdaten (Temperatur, Luftdruck, Luftfeuchtigkeit) als ein Array übergeben lassen und sich mithilfe einer weiteren Methode aktualisieren.

In beiden Fällen müsste man ja die Anzeigeobjekte für den Datenempfang vorhalten.

Bitte um Aufklärung!
 

Marco13

Top Contributor
Und woher sollten die anderen Klassen wissen, dass sie sich neue Daten abholen können? Ja, dazu müßten sie irgendwie benachrichtigt werden, wenn sich die Daten ändern... ;)
(Ausführlicher?)
 
U

Unregistriert

Gast
Angenommen, ich hätte eine Klasse Wetterdaten mit einer Methode:

Java:
public String[] getWetterDaten()
{
return WetterDaten[];
}

Dann könnte ich doch eine Methode schreiben:

Java:
public void aktualisiereAnzeigen()
{
Anzeige1.update(getWetterDaten());
Anzeige2.update(getWetterDaten());
Anzeige3.update(getWetterDaten());
}

Und immer dann im Timer aufrufen.

Meine Frage ist, warum ist es besser einen Observer zu verwenden?


[/code]
 
S

SlaterB

Gast
wo soll diese Methode stehen?
Observer hat den Vorteil der losen Kopplung, die Wetterstation muss nicht die drei Anzeigen kennen, sie muss gar keine kennen, nur das Interface,
jede beliebige auch erst später programmierte Anzeige kann sich dynamisch an und auch abmelden
 
U

Unregistriert

Gast
Sie sollte dort stehen, wo die Datenaktualisierung gebraucht wird...

Observer hat den Vorteil der losen Kopplung, die Wetterstation muss nicht die drei Anzeigen kennen, sie muss gar keine kennen, nur das Interface,
jede beliebige auch erst später programmierte Anzeige kann sich dynamisch an und auch abmelden

In meinem Beispiel kennt die Wetterstation die Anzeigeobjekte auch nicht. Sie muss nur ein Datenarray zurückgeben. Was die Objekte daraus machen, ist ihre Sache.
Und man kann auch beliebig viele Anzeigeobjekte in die Liste hinzufügen.
 
S

SlaterB

Gast
schon sind wir wieder bei: ausführlicher

was ist
Anzeige1.update(getWetterDaten());
?

was ist da Anzeige1, eine Klasse oder ein Objekt? von welchem Typ? wo steht die Methode,
tausende Fragen

und nochmal ganz genau was dabei der Unterschied zu Observer sein soll, was du vermisst/ als umständlich ansiehst,
schließlich wäre 100% Observer-Pattern schon eine sehr ähnliche Methode in Wetterdaten:

private void aktualisiereAlleObserver() {
for (WetterObserver x : liste) {
x.update(getWetterDaten());
}
}
 
Zuletzt bearbeitet von einem Moderator:
U

Unregistriert

Gast
was ist
Anzeige1.update(getWetterDaten());
?

was ist da Anzeige1, eine Klasse oder ein Objekt? von welchem Typ? wo steht die Methode,
tausende Fragen


Das ist ein Objekt der Klasse AnzeigeElement. Die Methode Update übernimmt das Array. Sinnvoll wäre auch eine Methode Show, die z.B. die ArrayDaten als WriteLine auf den Bildschirm bringt.

private void aktualisiereAlleObserver() {
for (WetterObserver x : liste) {
x.update(getWetterDaten());
}
}

Bei der Variante würden ja Anzeige-Elemente automatisch benachrichtigt. Bei meinem Beispiel:
public void aktualisiereAnzeigen()
{
Anzeige1.update(getWetterDaten());
Anzeige2.update(getWetterDaten());
Anzeige3.update(getWetterDaten());
}

Müssten sich die Anzeigeelemente selbst um ihre Benachrichtigung kümmern.

Ich verstehe einfach nicht, warum es die erste Variante besser ist. Sorry, da hakt es bei mir einfach.
 
S

SlaterB

Gast
um das Verständnis können wir uns später kümmern, vorerst ist erst festzustellen, worin der Unterschied liegt

mein Code
Java:
private void aktualisiereAlleObserver() {
  for (WetterObserver x : liste) {
     x.update(getWetterDaten());
  }
}
ließe sich bei drei Elementen ausschreiben etwa zu

Java:
private void aktualisiereAlleObserver() {
  list.get(0).update(getWetterDaten());
  list.get(1).update(getWetterDaten());
  list.get(2).update(getWetterDaten());
}
also quasi
Java:
private void aktualisiereAlleObserver() {
  element0.update(getWetterDaten());
  element1.update(getWetterDaten());
  element2.update(getWetterDaten());
}

wie das nun was fundamental anderes als dein Code
Java:
public void aktualisiereAnzeigen()
{
  Anzeige1.update(getWetterDaten());
  Anzeige2.update(getWetterDaten());
  Anzeige3.update(getWetterDaten());
}
sein soll, verstehe ich noch nicht, Methodenname, Name der Variablen/ Klassen?

wie kann das eine eine automatische Benachrichtung sein, das andere dagegen etwas, wo man sich selbst kümmern muss,
bei derart ähnlichen Code?

du musst deine Theorien in vielen langen Sätzen beschreiben
 
U

Unregistriert

Gast
Das Verständnis allgemein fehlt mir nicht - nur der Aha-Effekt, der mir sagt: "Geil, dieses Pattern haut mich weg!"

Achso, in dem Head First Beispiel ist deine

Java:
private void aktualisiereAlleObserver() {
  for (WetterObserver x : liste) {
     x.update(getWetterDaten());
  }
}

in eine Methode der Klasse WetteDaten. Also ungefähr so:

Java:
public class WetterDaten
{

//ein paar Datenelemente

// noch ein paar andere Methoden

public String[] getWetterDaten()
{
return WetterDaten[];
}

private void aktualisiereAlleObserver() {
  for (WetterObserver x : liste) {
     x.update(getWetterDaten());
  }
}


}


Bei meiner Version würde ich die aktualisiereAlleObserver-Methode rausnehmen. Beispielsweise hätte man einen Button, der die Aktualisierung der Anzeigen ausführt:

Java:
public void aktualisiereAnzeigen()
{
  Anzeige1.update(getWetterDaten());
  Anzeige2.update(getWetterDaten());
  Anzeige3.update(getWetterDaten());
}

private void btnStart_Click(object sender, EventArgs e)
{
aktualisiereAnzeigen();
}
 
U

Unregistriert

Gast
Ich versteh nicht, warum die eine Variante jetzt das Observer Pattern ist und der Kram, den ich zusammengefrickelt habe, keins ist.

Ich verstehe nicht, warum das eine locker gekoppelt ist und das andere nicht.

Ich verstehe nicht, warum Variante 1 gute OOP ist und das andere nicht.
 

ARadauer

Top Contributor
Ich versteh nicht, warum die eine Variante jetzt das Observer Pattern ist und der Kram, den ich zusammengefrickelt habe, keins ist.

Ich verstehe nicht, warum das eine locker gekoppelt ist und das andere nicht.

Ich verstehe nicht, warum Variante 1 gute OOP ist und das andere nicht.

Wenn dein Observerable deinen Observer nicht konkret kennt, sondern nur über das Interface. Kann die Implementierung belieger ausgetauscht werden und ist noch so eng gekoppelt...
 
U

Unregistriert

Gast
Könntest du konkrete Beispiele für diese Probleme nennen, die es löst. Das würde mir sicher einen massiven Sprung geben.
 

ARadauer

Top Contributor
MVC Pattern. Du hast eine oder mehrer Guis, ein Datenmodell und einen Controller die die Anwendungslogik steuert.

Stell dir das Programm Excel vor. Du hast Daten, die werden in Tabellen und diversen Grafiken dargestellt. Jetzt geht der Benutzer her und ändert die Daten.... was nun.. in der Theorie (keine Ahnung wies die Typen wirklich implementiert haben) Wird über eine View (zb das tabellenblatt) eine Methode im Controller angestoßen der die Daten des Model ändert. Nun informiert das Model, alle Views über die Änderung der Daten und diese aktualisieren sich. Das Datenmodell muss nun gar nix über die verschiedenen Views wissen... es können dynamisch weitere Diagramme hinzugefügt werden ohne das irgendwas am Model geändert werden mus...
 
S

SlaterB

Gast
Ich versteh nicht, warum die eine Variante jetzt das Observer Pattern ist und der Kram, den ich zusammengefrickelt habe, keins ist.

Ich verstehe nicht, warum das eine locker gekoppelt ist und das andere nicht.
wie ich vorher geschrieben hatte denke ich dass beides das gleiche ist,
dass noch gar kein Unterschied besteht
 
U

Unregistriert

Gast
MVC Pattern. Du hast eine oder mehrer Guis, ein Datenmodell und einen Controller die die Anwendungslogik steuert.

Stell dir das Programm Excel vor. Du hast Daten, die werden in Tabellen und diversen Grafiken dargestellt. Jetzt geht der Benutzer her und ändert die Daten.... was nun.. in der Theorie (keine Ahnung wies die Typen wirklich implementiert haben) Wird über eine View (zb das tabellenblatt) eine Methode im Controller angestoßen der die Daten des Model ändert. Nun informiert das Model, alle Views über die Änderung der Daten und diese aktualisieren sich. Das Datenmodell muss nun gar nix über die verschiedenen Views wissen... es können dynamisch weitere Diagramme hinzugefügt werden ohne das irgendwas am Model geändert werden mus...

Achso, dann ist es also wichtig, dass auf die Änderung sofort eine Aktualisierung stattfindet. Würde man es also so machen, wie ich (der Button), hätte man einen Timer, der ununterbrochen die Aktualisierung vornimmt und damit ein Programm wie Excel, massiv ausgelastet würde.
Es geht also um eine Echtzeitänderung.

wie ich vorher geschrieben hatte denke ich dass beides das gleiche ist,
dass noch gar kein Unterschied besteht
[/QOUTE]

Ich dachte, es wäre nur Observer, wenn das Design exakt so nachempfungen wäre.

Hättest du mal ein Beispiel, wann Objekte eng gekoppelt wären?
 
S

SlaterB

Gast
wenn die SwingKlasse de.unregistiert.projects.swing.MySwingGUIVersion12Dezember heißt
und in WetterDaten genau diese Klasse auftaucht,

das darf nicht sein, WetterDaten darf sich nur mit allgemeinen WetterObserver-Objekten beschäftigen,
ob nun genau ein oder genau drei Observer oder eine ganze Liste ist dann noch Komfort, man will ja schließlich auch mehrere erlauben
 
U

Unregistriert

Gast
Danke!

Ich glaube, ich habe nun kapiert, worum es geht. Dann kann ich ja aufatmen und beruhigt weiterlesen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Testkonzept erstellen - Verständnisschwierigkeiten Allgemeine Java-Themen 6
M OOP Design Pattern - "extends Observable implements Observer" Allgemeine Java-Themen 0
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
G 2 Observable und ein Observer... Allgemeine Java-Themen 4
M MVC: PropertyChangeListener vs Java Observer & Observable Allgemeine Java-Themen 11
S Wie kann ein Observer mehrere Observables beobachten? Allgemeine Java-Themen 9
Z Observer/Observable & Grundlagen Allgemeine Java-Themen 6
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
H Observer und Observable Allgemeine Java-Themen 3
B Observer vs Listener (GUI-Programmierung) Allgemeine Java-Themen 5
M Observer serialisieren Allgemeine Java-Themen 7
G Observer / Observable oder doch lieber Message Broker? Allgemeine Java-Themen 2
D Observer/Observable Pattern vs. Listener-Konzept Allgemeine Java-Themen 4
P Observer/TimerTask Allgemeine Java-Themen 3
P Observer Allgemeine Java-Themen 4
N Observer/Observable der JAVA-API od. eigene Implementierung Allgemeine Java-Themen 2
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
lhein Tutorial zu Observer / Observable? Allgemeine Java-Themen 6
G problem mit dem observer pattern Allgemeine Java-Themen 3
S Observable und Observer Allgemeine Java-Themen 10
G Frage zu (mehrfachem) Observable/Observer Allgemeine Java-Themen 2
G Frage zum Observer Pattern Allgemeine Java-Themen 4
mihe7 equals und instanceOf pattern matching Allgemeine Java-Themen 9
L Pattern Eventhandler Allgemeine Java-Themen 5
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
Z MVC Pattern - sinnvolle Integration Allgemeine Java-Themen 6
J Meinung zum verwendeten Design Pattern Allgemeine Java-Themen 4
Kirby.exe Filename nach bestimmtem Pattern durchsuchen Allgemeine Java-Themen 5
Meeresgott Best Practice "Spezifisches" Factory Pattern ? Allgemeine Java-Themen 1
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
M Vaadin MVP Pattern Allgemeine Java-Themen 1
N Java MVC Pattern richtig anwenden Allgemeine Java-Themen 24
K Factory Pattern: Mit Generics umgehen Allgemeine Java-Themen 6
perlenfischer1984 Welches Design Pattern ist geegneit. Allgemeine Java-Themen 7
perlenfischer1984 Hilfe bei Design (Pattern) Allgemeine Java-Themen 5
J Compilerfehler bis in java.util.regex.Pattern... Allgemeine Java-Themen 2
B MVC-Pattern größeres Beispiel Allgemeine Java-Themen 16
L Erste Schritte Java Date Format Pattern bestimmten Allgemeine Java-Themen 2
D Pattern mit Pattern vergleichen Allgemeine Java-Themen 3
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
S Hilfe bei geeignetem Pattern (Decorierer) Allgemeine Java-Themen 2
F Welches Design Pattern? Allgemeine Java-Themen 3
J Pattern aus String entfernen Allgemeine Java-Themen 2
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
D Variablen zur Laufzeit global speichern (Registry Pattern?) Allgemeine Java-Themen 6
Rudolf State Pattern als Enum? Allgemeine Java-Themen 10
M massenhaft verschiedene Date-Pattern Allgemeine Java-Themen 3
Guybrush Threepwood Pattern gesucht: Punkt ohne Leerzeichen dahinter Allgemeine Java-Themen 3
turmaline OOP Decorater Pattern für Varifikationsverhalten Allgemeine Java-Themen 13
T HTML Tag Position mittels Pattern ermitteln Allgemeine Java-Themen 7
X Datentypen Prozentualer Abgleich zwischen 2 Strings (Pattern?) Allgemeine Java-Themen 3
H Pattern.compile Syntax Allgemeine Java-Themen 15
B RegEx: (Um-)formulieren eines Pattern zur Identifizierung komplexer URLs Allgemeine Java-Themen 7
D [Drag&Drop] Design-Pattern-Frage Allgemeine Java-Themen 4
T Pattern für Benutzer-Gruppen, RMI Allgemeine Java-Themen 5
E Super erzwingen, konzept/pattern gesucht. Allgemeine Java-Themen 8
H Problem mit der Klasse Pattern - Regulärer Ausdruck Allgemeine Java-Themen 2
Eldorado Meinung zu einem abgewandelten MVC-Pattern Allgemeine Java-Themen 2
R Matcher - Pattern mit belibigem Anfang Allgemeine Java-Themen 2
H Bestimmten String mit Pattern und Matcher herauslesen => kein erfolg Allgemeine Java-Themen 9
I Pattern zum Erweitern existierender Objekte Allgemeine Java-Themen 4
I Template Method pattern mit "geschützten Methoden" Allgemeine Java-Themen 5
T Pattern: Passive View Allgemeine Java-Themen 2
T Pattern: Greedy, Reluctant, Possessive Allgemeine Java-Themen 4
S Hilfe bei Pattern Allgemeine Java-Themen 5
N Registry Pattern Allgemeine Java-Themen 7
Tandibur Denkfehler bei Pattern.matches? Allgemeine Java-Themen 3
Tandibur pattern dynamisch vorkompilieren Allgemeine Java-Themen 9
N Pattern Allgemeine Java-Themen 11
Iron Monkey Pattern - Matcher - Problem Allgemeine Java-Themen 3
ruutaiokwu welches design pattern? frage an die oo-experten unter euch... Allgemeine Java-Themen 3
G Accordion Design Pattern Frage Allgemeine Java-Themen 2
hdi Hilfe beim Design (Stichwort OO, Pattern, ...) Allgemeine Java-Themen 11
H2SO3- String(pattern) von SimpleDateFormat auslesen Allgemeine Java-Themen 7
M Problem mit Pattern Allgemeine Java-Themen 3
N Welches design pattern? Allgemeine Java-Themen 8
B Pattern gesucht, Programm Optionen, Casten vermeiden Allgemeine Java-Themen 3
D Welches Pattern kann ich nutzen? Allgemeine Java-Themen 9
J Suche regex-Pattern fuer Liste von Zahlen zwischen 0-100 Allgemeine Java-Themen 6
G Sequenzdiagramm Dao Pattern Allgemeine Java-Themen 3
S regex-Pattern Ausdruck negieren Allgemeine Java-Themen 2
J Pattern eines Textes Allgemeine Java-Themen 4
M Java Garbage Collector Frage (Singleton Pattern) Allgemeine Java-Themen 13
Y Pattern Problem Allgemeine Java-Themen 2
G UML-Diagramme mit DAO Pattern Allgemeine Java-Themen 7
S Pattern regex Allgemeine Java-Themen 2
G Composite, Design Pattern, printTree Allgemeine Java-Themen 42
J Regex Pattern Problem Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben