eigenen Observer schreiben

  • Themenstarter Themenstarter Gast
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Gast

Gast
´Hallo,

ich bin gerade dabei meinen eigenen Observer für meine GUI zu schreiben. Mein JFrame ist der Observer,
der reagieren soll, wenn sich in den angeschlossenen Panels etwas ändert.

Jetzt habe ich also für die Panels mein Interface Observable:

Code:
public interface Observable {
	
	public void addObserver(Observer obs);
	
	public void deleteObserver(Observer obs);

	public void notifyObserver(Observer obs);

}

Meine Frage ist, ob die Möglichkeit besteht, die Methoden nur einmal für alle Panels zu implementieren.
Alle Panels erben bei mir von einer Klasse, dem Hauptpanel. Wenn ich hier das Interface implementiere,
erben alle anderen Panel die Methoden . Es gibt dann nur einen Observable .

Wie kann man dann die einzelen Observables unterscheiden?

Macht es Sinn soetwas umzusetzen oder wäre es sinnvoller das Interface in jedes einzelne Panel zu
stecken ?


Viele Grüße
 
wenn alle Subklassen einer Klasse das gleiche Interface implementieren und die Oberklasse selber nicht für sich verwendet wird,
dann scheint es mir sinnvoll, dass die Oberklasse das Interface implementiert

> Es gibt dann nur einen Observable .
> Wie kann man dann die einzelen Observables unterscheiden?

jedenfalls nicht, indem du alle Unterklassen Observable implentieren läßt,
das macht keinen echten Unterschied
(es sei denn ein paar Unterklassen implementieren es, ein paar nicht)

> Wie kann man dann die einzelen Observables unterscheiden?

überlege dir vorher, was das für eine Unterscheidung sein soll, wie sie sich auswirkt, wo sie verwendet wird usw.,
denkbar wären mehrere Unterinterface von Observable,
z.B RedObservable und BlueObservable,
 
Danke erst einmal für die Antwort.

Es ist bei meinem Observer so, dass ich nur einen Abonnenten habe , den MainFrame.
Alle Panels sind die Observarables.

Das ist bei dem Observer Pattern eigentlich anders herum. Aber nun gut.


Mein Haupt Panel, von dem alle erben bekommen diese Methoden:

Code:
public void setObserver(Observer o) {
		System.out.println("Observer hinzufügen");  <-- wird ausgegeben.
		observers.add(o);
	}
	
	
	public void removeObserver(Observer o) {
		int i = observers.indexOf(o);
		if (i >= 0) {
			observers.remove(i);
		}
	}
	
	public void informObserver(Object o, ArrayList list) {
		System.out.println("Oberserver:"+observers.size());  <-- Ausgabe ist 0
		for (int i = 0; i < observers.size(); i++) {
			Observer observer = (Observer)observers.get(i);
			observer.aktualisiere(o , list);
			System.out.print("aufgerufen");
		}
	}

Im Konstruktor wird eine ArrayList observers erstellt.

Mein MainFrame muss eine Instanz des HaupPanels erzeugen und auf Ihr dann die
Methode setObserver(this) aufrufen.

Mein Problem ist, dass die Methode zwar aufgerufen wird, aber die ArrayList leer bleibt.

Also setObserver(this); führt nicht dazu, dass das MainFrame eingetragen wird.

Hat jemand vielleicht eine Idee , warum ich meinen MainFrame nicht in die ArrayList setzen kann ?
 
gib auch jeweils observers.hashCode() aus, um herauszufinden,
ob es sich um die gleichen Objekte handelt/ die gleichen Panels usw.

generell kann man aber nicht viel sagen ohne deinen ganzen Code
(reduziert um alles, was nicht mit dem Thema zu tun hat)
 
Dabei kommt aber gleich etwas Anderes:

Ich nutze den Java.util.Observer und Starte aus der GUI mehrere Anfragen an verschiedene Klassen. In den Klassen rufe ich dann
am Ende immer

setChanged();
notifyObservers(irgendetwas); auf.

In der GUI kommt aber immer nur ind der Update Funktion der
Rückgabewert einer Klasse an. Wenn ich eine andere Klasse anspreche, kommt nichts an...

Kann man denn mit dem Observer immer nur ein Object beobachten ?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben