Observer Patteern java

Spin

Top Contributor
Hallo, wie kann ich java beibringen das ein View mehrer Models beobachtet?

Mit einem Model gehts super, aber mit mehreren geht es nicht.
Ich kann also nicht :

Java:
model.addObserver(view);
model1.addObserver(view);


View:

update(Observer ...)
// hier bekomme ich nur 1 Model, niemals beide !


Danke für Links oder Tipps, grüße Spin
 
So wie's aussieht nutzt Du die Java Standardimplementierung von Observer und Observable, dabei übergibt das Observable eine Referenz auf sich beim benachrichtigen des Observers mit, somit kann man ja vergleichen welches Observable die update Methode ausgelöst hat.
 
Alles gut 😉

Java:
if(arg.getClass() == Staple.class){
			Staple game = (Staple)arg;
			this.setStaple(game.getSize());
		
		} else if(arg.getClass() == GameTimer.class){
			GameTimer gameTimer = (GameTimer)arg;
			this.setTimerView(gameTimer.getTime());
		}

Diese Anfänger Frage --- echt peinlich 😉

Das Pattern ist ja so gebaut, dass estra mehrere Models von einem View beobachtet werden kann 😉

Ich habe trotzdem eine Frage.

Frage:
Ich möchte gerne game.getSize() haben und diese größe auf einem Label anzeigen lassen. Leider wird sie erst angezeigt, wenn die update Methode gefeuert wird., setChanged() usw.

Wie kann ich die manuell beim erstenmal feuern?
Ich habe setChanged schon im Konstruktor reingepackt, aber irgendwie passiert nichts 😉

Wie kann ich also Manuel die update starten. Einmal brauche ich sie nur, danach wird sie erst gebraucht wenn ein Button gedrückt wird.

Villeicht weiss da noch einer einen Rat 🙂

danke cooles java team 🙂
 
Zunächst einmal der Hinweis auf
Code:
instanceof
Allerdings würde ich in der View ein Liste der Observable halten, um dann auf Gleichheit vergleichen.
Ich möchte gerne game.getSize() haben und diese größe auf einem Label anzeigen lassen. Leider wird sie erst angezeigt, wenn die update Methode gefeuert wird., setChanged() usw.

Wie kann ich die manuell beim erstenmal feuern?
Wieso feuern? Kann man nicht einfach game.getSize() erfragen, wenn man die Information benötigt.
 
Ok ich nehme auch gerne instanceOf, aber das löst meine Frage noch nicht.

Ich dachte beim MVC darf das View nicht sein Model kennen.
Daher habe ich keine Liste von Models die beobachtet werden.


Weiter habe ich game nur in der Methode update , die wiederum nur gefeuert wird, wenn setChange bzw notify ..aufgerufen wird.

Daher muss ich die manuel einmal anschubsen, sonst geht es nicht. Wie kann ich das also machen? 🙂

danke
 
Ich dachte beim MVC darf das View nicht sein Model kennen.
Im Fall von MVC kennt die View das Interface des Models und hält eine Referenz auf dieses.
Beim Observer Pattern (hab nie wirklich mit diesem auseinandergesetzt) ist das glaube ich nicht so.

Kannst ja mal beschreiben, was Du vorhast. Dann kann man Dir vielleicht ein paar Vorschläge zum Aufbau machen.
 
Ich bin dabei Rummikub zu programmieren und das im MVC.
Dabei habe ich aber einige Schwirigkeiten alles richtig in MVC umzusetzen. Die Logik und das Programmieren eher weniger, aber die Archtektur.

Nun möchte ich gerne einen Stein aufheben lassen in dem man einen Button drückt.
Unter diesem soll ein Label sein, wieviele Steine noch vorhanden sind.

Es funktioniert alles bis auf das mein Programm nicht ganz MVC ist ....denke ich zumindest.
Um eine schöne Struktur zu haben, finde ich das Observer Pattern echt toll.

Keine get.get.get.get 😉

So wie man sich denken kann , soll gleich zum anfange angezeigt werden : 60 Steine noch verfügbar.
Leider wird der Text erst angezeigt wenn ich das erste mal das update feuer.

Denn nur dort kann ich mir game.getSize() holen.
Da ich es nur da habe , muss ich diese Methode doch irgendwie manuell feuern können.

Das ist die ganze Zeit mein Problem.

Ich meine dem Label kann man vorher "hallo" geben und wenn ich dann das Event einmal feuer , dann wird dort die Zahl angezeigt. Aber ich möchte das gleich haben 😉

Komisch das noch nie einer das gleiche Problem hatte 😛

grüße , wenn code mehr hilft, poste ich den gerne noch.

danke
 

Zurück
Oben