Observer und Initialisierung

Anto

Aktives Mitglied
Hallo, ich will mittels Observer Pattern ein Spielfeld initialisieren. Das Feld soll beim Programmstart erscheinen.
Da habe ich nun ein Problem. Mir ist klar dass die Observer die Modelklasse beobachten, die selbst von Observable extenden. Wenn immer im Model etwas geändert wird, springt die update-Methode in den Observern an.
Aber: Das Spielfeld soll ja direkt beim Programmstart erscheinen, da wird doch noch nichts geändert? Wie werfe ich das dann also an?
 
In dem Moment, in dem sich der Observer anmeldet, holt er sich den aktuellen Wert aus dem Observable heraus.

Über Ändeurngen wird er dann informiert.
 
2 Möglichkeiten:
- Der Controller lässt das Model die Daten einlesen, beim update() passiert nichts, da es noch keine View gibt
- Die View wird erstellt*, angezeigt und hat schon alles drin
oder
- Der Controller erstellt* ein leeres Model
- Der Controller erstellt* eine View und zeigt diese an
- Der Controller lässt das Model die Daten einlesen, ein update() passiert
- Der Controller erkennt das Update und wirft es weiter an die View, welche dann einen repaint macht


*natürlich muss es nicht im Controller selber erstellt sondern kann per Konstruktor diesem übergeben werden
 
Wohl nichts davon....laut dem, wie wir programmieren sollen, wirft der Controller überhaupt nichts an die View, sondern die View ist selbst Observer des Models.
 
Denke, dass hier das MCV Pattern besser geeignet wäre, als das reine Observer Pattern.
Verwendest Du die Observer und Observable Klassen aus der Standard API? Die sind mir oft zu eingeschränkt und ich definiere lieber eigene Interfaces.
Wenn du bei dem Observer Pattern bleiben willst, könntest Du die addObserver(...) des Observables entsprechend überschreiben und bei der Registrierung eines Observers direkt ein "notify" aufrufen. Problematisch wäre, dass hierbei immer alle Observer benachrichtig werden, bei dir gibt es aber ja nur einen.
 
Ach so, ich dachte ihr sollt das nach dem MVC Prinzip machen. Da hört der Controller auf die View (Button Clicks, Contextmenus, was auch immer) und auf das Model (View updaten nach einem Call). Er ist die zentrale Schnittstelle in deinem Programm.
 
An sich ist die Idee tatsächlich MVC, aber uns wurde das eben so erklärt, dass die View über Observer beim Model angemeldet sei und nur so überhaupt mit dem Model kommuniziere. Das anmelden erledigt der Controller.
An meinen Vorgaben kann ich auch nichts ändern.

Da ich das erste Mal überhaupt Observer benutze, will ich da jetzt nicht gleich mehr umschreiben als notwendig, ich bin Anfänger.
 
Wie gesagt, in dem Moment wo sich der Observer anmeldet, kann er doch auch die Daten auslesen?! Das ist absolut üblich wenn man keine weiteren Abstraktionsschichten einführt.
 

Neue Themen


Zurück
Oben