Observer vs Listener

T

Tomate_Salat

Gast
Java ist auch ein Insel hat gesagt.:
Eine Erweiterung der Möglichkeiten über Observer/Observable sind Listener.
ist mir also schon klar.

Also ich hab mich in den letzten Tagen verstärkt mit Observern beschäftigt, da ich die schändlicherweise nie eingestzt hatte. Ich meine mal was von ihnen gehört zu haben, aber das ging wohl iwie unter. Als erstes dachte ich : "ach du kacke, wie mvc-freundlich ist jetzt eigentl. dein aktuelles Programm, wenn du nie solche benutzt hast". Dann hab ich mir die FAQ's hier durchgeschaut. Habe eigene simple übungen zu Observern gemacht, dann habe ich das TicTacToe-Beispiel nachgebaut und erkannt: Aha, da sind garkeine "reinen" Observer drinne, sonder nur Listener...Und mit denen Arbeite ich auch!
Meine Programme haben noch zu viel Abhängigkeiten, was ich mit jedem neuen Projekt auch bemüht bin zu vermeiden.

Ok, so als ich meine erste Observer-Übung geschrieben hatte, dachte ich mir: hmm, ist aber ganz schön blöd, wenn wirklich JEDER informiert wird. Da muss jeder Observer ja einige Fallunterscheidungen haben, damit er seinen Informationen erkennen kann.
Das Probelem hat man mit Listenern nicht. Also kam nachdem TicTacToe-Beispiel die Frage: Ist die reine Observerklasse überhaupt noch Zeitgemäß dann, sollte man die so überhaupt noch verwenden?
klar ist es Praktisch, wenn eine Information raus muss, die ALLE Observer interessiert, aber mir fällt da einfach kein Beispiel ein :bahnhof:

MFG

Tomate_Salat
 
S

SlaterB

Gast
Listener SIND Observer/Observable, nur eben etwas besser mit spezifischen Events, in denene Infos stecken,
Anmeldung für verschiede Eventklassen (Mouse, Key, Action) usw.

nur weil String eine Klasse ist mit viel mehr Details und Attributen ist,
kann man doch nicht sagen, dass eine leere Klasse/ ein Interface an sich oder das Typsystem/ Vererbung in Java sinnlos ist ;)
 
T

Tomate_Salat

Gast
Listener SIND Observer/Observable, nur eben etwas besser mit spezifischen Events, in denene Infos stecken,
Anmeldung für verschiede Eventklassen (Mouse, Key, Action) usw.

Das ist mir klar ;-)

nur weil String eine Klasse ist mit viel mehr Details und Attributen ist,
kann man doch nicht sagen, dass eine leere Klasse/ ein Interface an sich oder das Typsystem/ Vererbung in Java sinnlos ist ;)
Nein, du verstehst mich falsch: nicht zeitgemäß sollte nich heisen: nicht sinnvoll. Mir geht es nur darum, wie man Observer verwenden sollte, also nicht in form von spezifischen Listenern, oder ob Sie nur rein als Basis für Listener dienen sollen.
 
M

maki

Gast
Klar haben Listener Vorteile genenüber reinen Observern, aber wenn man sich zB. das Eclipse DataBinding ansieht, kommt man zum Schluss, dass Listener nicht mehr zeitgemäß sind ;)
 

FArt

Top Contributor
Oft verwendete Nomenklatur:
Observable benachrichtigen die Observer synchron, Listener werden asynchron benachrichtigt.
 
S

SlaterB

Gast
also in Swing werden die Listener aber vom AWT-Thread ausgeführt, oder wie ist asynchron vs synchron zu verstehen?
 
S

SlaterB

Gast
worauf FArt so unverblümt hinwies war nicht, welcher Thread blockierend oder nicht die Listener aufruft,
sondern wann die Events ausgeführt werden,

wenn eine JTable fireTableDataChanged() ausführt, werden nicht direkt die Listener informiert, sondern ein Event erzeugt,
in eine Bearbeitungs-Warteschlange hinten eingefügt und irgendwann später nach Beeendigung der aktuellen Aufgaben bearbeitet

edit: gar nicht mal wahr, bei AbstractTableModel ist es nicht so, aber bei manchen Events vielleicht wie Mouse/ Key,
oder ich verstehe es immer noch falsch, dann bitte noch korrigieren ;)
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Meine (perpsönliche) Unterschiedung ist grob: Ein Observer kreigt einen Methodenaufruf, ein Listener einen Methodenaufruf+Event, aber wirklich konsequent (und vor allem: etabliert) ist das natürlich nicht. Eigentlich ist "Observer" nur als ein abstraktes Konzept zu sehen - und dass die Klasse in Java zufällig genau so heißt ist eher "Zufall".....
 

FArt

Top Contributor
Die AWT EventQueue ist wieder ein besonderer Fall, weil dort eben nur ein anderer Thread die Bearbeitung (Queue eben) ausführt... aber das Prinzip ist trotzdem das Selbe...
 

ThreadPool

Bekanntes Mitglied
Meine (perpsönliche) Unterschiedung ist grob: Ein Observer kreigt einen Methodenaufruf, ein Listener einen Methodenaufruf+Event, aber wirklich konsequent (und vor allem: etabliert) ist das natürlich nicht. Eigentlich ist "Observer" nur als ein abstraktes Konzept zu sehen - und dass die Klasse in Java zufällig genau so heißt ist eher "Zufall".....

Gut dann gebe ich hier auch mal meine Def. zum Besten wie ich es kennengelernt habe. ;) Das
Observer-Pattern symbolisiert eine spezielle Ausprägung eines Publish-Subscriber-Mechanismusses.
Die dadurch gekennzeichnet ist, dass das Observable direkt eine Liste von seinen Observern hält und
diese über, wie auch immer geartete Änderungen, benachrichtigt. Asynchronität bekommt man da nur
rein wenn man die Liste durchgeht und für jeden Observer das notify (oder was auch immer) in einem
eigenen Thread ausführt, macht man das nicht ist es synchron.
 
Zuletzt bearbeitet:
T

Tomate_Salat

Gast
Ich habe immernoch keine Ahnung wie ich Observer einzuordnen habe :-/. Spontan würde ich sagen: als Basis zu den Listenern aber man sollte sie nicht mehr aktiv in seinem Code verwenden. Aber iwie würde ich mir selber da auch widersprechen wollen :-/.
Im Prinzip gibt es doch keinen Anwendungsfall bei dem man Observer/Observable anstatt Listener nehmen sollte, da man doch im Prinzip alles was man mit Observern auch mit Listernen lösen kann + besser.
 
S

SlaterB

Gast
AbstractList ist wirklich eine dämliche Klasse, es gibt keine Situation in der ich sie nutze, immer nehme ich eine der Subklassen ArrayList oder LinkedList
 

André Uhres

Top Contributor
Bei Swing werden die Listener eines Objektes (gewöhnlich eines Models) ausnahmslos in entgegengesetzter Reihenfolge der Hinzufügung benachrichtigt, also nicht asynchron. Es gibt zwar (leider) kein Java Grundsatz, der diese Reihenfolge verlangt, jedoch ist sie sinnvoll, denn nur so kann Client Code das implementierte Verhalten ändern. Siehe auch EventListenerList (Java 2 Platform SE v1.4.2)
Wenn mit Observable eine Ableitung von der Klasse java.util.Observable gemeint ist, dann hat das einen offensichtlichen Nachteil: wenn die Klasse, die wir von java.util.Observable ableiten wollen, bereits von einer anderen Basisklasse erbt (außer natürlich Object), dann ist diese Option schlicht nicht machbar.
 

byte

Top Contributor
Klar, per Komposition:

Java:
class FooPanel extends JPanel {
  private Observable observable;
  ...
  public void addObserver(Observer observer) {
    observable.addObserver(observer);
  }

  public void foobar() {
    // ...
    observable.hasChanged();
    observable.notifyObservers();
  }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Observer vs Listener (GUI-Programmierung) Allgemeine Java-Themen 5
D Observer/Observable Pattern vs. Listener-Konzept Allgemeine Java-Themen 4
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
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
U Verständnisschwierigkeiten Observer Pattern Allgemeine Java-Themen 18
M Observer serialisieren Allgemeine Java-Themen 7
G Observer / Observable oder doch lieber Message Broker? Allgemeine Java-Themen 2
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
berserkerdq2 Was heißt es mit FXML Listener zu setzen ind Buttons zu erstellen? Allgemeine Java-Themen 6
L Wie programmiert man einen Listener? Allgemeine Java-Themen 1
S Threads Serielle Schnittstelle mit Listener / Aufrufendes GUI Allgemeine Java-Themen 4
H Listener Verständnisproblem Allgemeine Java-Themen 5
D Action Listener Problem Allgemeine Java-Themen 3
S Key Listener mit Strg + s Allgemeine Java-Themen 12
K Threads Listener für Future finish Allgemeine Java-Themen 2
TheWhiteShadow Listener Reihenfolge Allgemeine Java-Themen 4
D Listener auf System.out.err / System.out.println Allgemeine Java-Themen 5
A Listener für constructor einer bestimmen Klasse Allgemeine Java-Themen 9
E Bild mit Listener einfügen Allgemeine Java-Themen 3
P Listener für Tastatureingaben ohne Focus Allgemeine Java-Themen 4
serjoscha WatchDog Thread und Listener Allgemeine Java-Themen 10
hdi Listener für Desktop-Veränderungen Allgemeine Java-Themen 7
T JTextField in Listener leeren Allgemeine Java-Themen 2
lenniii Listener & JList Allgemeine Java-Themen 3
K Key listener ohne Fokus aktiv behalten ? Allgemeine Java-Themen 12
G Code-Convention für Listener Allgemeine Java-Themen 2
S Listener Allgemeine Java-Themen 3
P Abstrakte Elternklasse als Listener Allgemeine Java-Themen 6
MQue KeyAction listener Allgemeine Java-Themen 2
M generische Listener Allgemeine Java-Themen 2
S Listener für Kalender Allgemeine Java-Themen 2
J Listener für Ende eines Threads gesucht... Allgemeine Java-Themen 5
S Listener Implentierung bei Eingabe in Textfeld Allgemeine Java-Themen 2
G Objekt einer inneren Klasse als Listener Allgemeine Java-Themen 3
D Boolean Listener? Allgemeine Java-Themen 28
M Listener und Performance Allgemeine Java-Themen 9
G Listener auf aktuelles Datum / Uhrzeit Allgemeine Java-Themen 2
Escorter Eigenen Listener schreiben Allgemeine Java-Themen 3
E Gibt es so etwas wie einen Windows Listener? Allgemeine Java-Themen 6
T SelectionProvider und Listener Frage Allgemeine Java-Themen 14
I Listener, der zeitlich-periodisch aufgerufen wird Allgemeine Java-Themen 3
R Generische Listener und Sender Allgemeine Java-Themen 12
B Listener dynamisch setzen Allgemeine Java-Themen 6
A Listener Tastatur Allgemeine Java-Themen 3
E Wie: Eigener Listener, eigenes Event (möglichst einfach) Allgemeine Java-Themen 29
D Thread vs Listener Allgemeine Java-Themen 6
K Listener einem Objekt hinzufügen Allgemeine Java-Themen 3
S Listener-Problematik in komplexem Projekt Allgemeine Java-Themen 2
I Listener/Event selber machen. Allgemeine Java-Themen 4
M Time Listener ? Allgemeine Java-Themen 2
Z Zwei Listener zwischen zwei Klassen Allgemeine Java-Themen 4
B statusbar update -> mit thread oder listener? Allgemeine Java-Themen 7
M Action-listener Allgemeine Java-Themen 6
M Bean Listener hinzufügen und Methode später überschreiben Allgemeine Java-Themen 27
G Flavor-Listener Allgemeine Java-Themen 6
E Listener für Änderung der Fenstergröße Allgemeine Java-Themen 3
W Listener an ein beliebiges Objekt hänger, der mir Änderung Allgemeine Java-Themen 8
Z Problem beim Aufruf eines Listener? Allgemeine Java-Themen 4
A HILFE: subclass von Hashtable mit listener aufstellen Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben