Ich weiß, dass dieses Thema zu Tode gedeckt wurde, aber ich bin immer noch kämpfen und könnte mit einer bestimmten Hilfe tun.Locker gekoppelt Beobachter Muster
Mein Ziel ist es, ein einfaches Observer-Muster zwischen einer Art beobachtbaren (sagen wir ein Hund) und einer Art von Listener (sagen wir Besitzer) zu implementieren.
Schließlich wäre der Besitzer eine "Ansicht" und der Hund ein "Modell" in einem MVC-Paradigma. Ich benutze Hund und Besitzer, nur um die Dinge hier zu vereinfachen.
Ich habe versucht, Javas eingebaute Observer/Observable-Klassen zu verwenden, habe aber festgestellt, wie schlecht die updates() -Methode ist - sie empfängt ein POJO und ich müsste dieses POJO in der update() -Methode prüfen/umwandeln. Ich würde es viel lieber haben, wenn meine 'update()' Methode etwas erhält, was sie erwarten kann.
So folgte ich ein paar Tutorials, auch diese, die den Hund/Besitzer als Beispiel verwendet:
http://www.youtube.com/watch?v=qw0zZAte66A
Hier habe ich gezeigt, wie meine eigene Beobachter/Beobachtet Klassen rollen. In Pseudo-Code, was ich jetzt habe, ist dies:
Dog/Model {
List listeners;
public fireDogHungryEvent() {
foreach listener {
listener.onDogHungry(this);
}
}
public fireDogPeeEvent() {
foreach listener {
listener.onDogNeedsToPee(this);
}
}
public getHungerLevel() { return hungerLevel; }
public getBladderCapacity() { return bladderCapacity; }
}
Owner/View {
public onDogHungry(model) {
println(model.getHungerLevel());
}
public onDogNeedsToPee(model) {
println(model.getBladderCapacity());
}
}
So, jetzt eher als ein Update() -Methode, ich habe Methoden, die bestimmte Ereignisse behandeln. Brillant. Ich bin derzeit mit der Owner/View-Klasse zufrieden. Es kennt die Methoden des Hundes/Modells und das ist gut (denke ich).
Was ich nicht mag ist, dass das Hund/Modell Verweise auf Methoden in der Besitzer/Ansicht hat. Ich habe unzählige Male gelesen und stimme völlig zu, dass ein Modell nicht eng an seine Ansichten gekoppelt sein sollte, so wie es scheint. Ich bin auch nicht scharf auf alle "Feuer" -Methoden im Hund/Modell, die fast dasselbe machen; Looping über alle seine Listener und nur eine andere Methode für jeden Listener aufrufen.
Ist es möglich, diese Beziehung weiter zu entkoppeln und nicht die Methode Dog/Model spezifische Methoden aufzurufen? Wenn ja, was ist der beste Weg, um Dog/Model-Daten in den Owner/View zu bekommen und damit zu arbeiten?
Dank
Welche Methoden von 'Dog' haben Verweise auf die Ansicht? Ich sehe keine. – SJuan76
Der beste Weg ist, eine Schnittstelle zu verwenden, die das Video-Tutorial vorschlägt. Ist Listener eine Schnittstelle in Ihrer Implementierung? –
SJuan76 - die Referenzen, über die ich spreche, sind die Aufrufe von listener.onDogHungry und listener.onDogNeedsToPee in den Dog 'fire'-Methoden. – whoshotdk