Frage

Ich habe gerade angefangen Spiel mit Observable, Observer und update() Methode ist es, und ich kann nicht verstehen, was soll ich tun, wenn verschiedene Aktionen notifyObservers() nennen.

Ich meine, hat meine Observable Klasse ein paar verschiedene Methoden, den Anruf setChanged() und notifyObservers() am Ende. Je nach der aufgerufenen Methode, ein Teil des UI (Swing) muss aktualisiert werden. Allerdings gibt es nur eine update() Methode in der Observer Klasse implementiert.

ich aber etwas zu dem notifyObservers() Methode vorbei und dann kann ich das Argument auf update() überprüfen, aber es fühlt sich nicht wie ein guter Weg, es zu tun. Selbst wenn es so wäre, was soll ich übergeben? Eine Zeichenfolge mit einer kurzen Beschreibung der Maßnahme / Methode? Ein int, wie ein Action / Methodencode? Etwas anderes?

Was ist der beste Weg, um diese Situation zu handhaben?

War es hilfreich?

Lösung

im Allgemeinen Sie alles aus dem beobachtbaren aktualisieren sollen, wenn Sie einen Anruf zu Update erhalten (). wenn das nicht möglich ist, können Sie einen Hinweis auf notifyObservers () übergeben.

die Bande-of-Buch sagt, dass eine der Folgen des Betrachters Muster:

"Unexpected Updates. Da Beobachter keine Kenntnis von jeder Anwesenheit des anderen haben, können sie blind für die tatsächlichen Kosten für das Thema zu wechseln sein. Eine scheinbar harmlose Operation zum Thema kann eine Kaskade von Updates für Beobachter und ihre abhängigen Objekte verursachen. Darüber hinaus Abhängigkeitskriterien, die nicht gut definiert sind oder in der Regel zu falschem Updates führen gehalten, was schwierig sein kann, nach unten zu verfolgen.

Dieses Problem wird durch die Tatsache erschwert, dass das einfache Update-Protokoll keine Details über bietet, was im Subjekt verändert. Ohne Zusatzprotokoll zur Hilfe Beobachter entdecken, was sich verändert, können sie gezwungen sein, hart zu arbeiten, um die Änderungen zu schließen. " auch in der Durchführung, sagen sie:

"Vermeiden Beobachter spezifische Update-Protokolle:. Die Push-und Pull-Modelle Implementationen der Beobachter-Muster haben oft das Thema Broadcast zusätzliche Informationen über die Änderung Gegenstand leitet diese Informationen als Argument zur Aktualisierung Der Menge an Informationen kann variieren.. weit.

Auf der einen Seite, die wir das Push-Modell nennen, sendet das Thema Beobachter Informationen über die Änderung detailliert, ob sie es wollen oder nicht. Das andere Extrem ist das Pull-Modell; Gegenstand sendet nichts anderes als die minimalste Benachrichtigung und Beobachter fragen Sie nach Details explizit danach.

Das Pull-Modell betont die Unkenntnis ihrer Beobachter des Subjekts, während das Push-Modell Themen kennen die Bedürfnisse etwas über ihre Beobachter annimmt. Das Push-Modell könnte machen Beobachter weniger wiederverwendbar, weil Subject Klassen Annahmen über Observer Klassen machen, die nicht immer wahr sein könnten. Auf der anderen Seite kann das Pull-Modell ineffizient sein, weil Klassen Beobachter müssen, was aus dem Thema ohne fremde Hilfe ermitteln geändert. „

Andere Tipps

Der zweite Parameter auf update() ist vom Typ Object, so dass Sie alles angemessen passieren können. Wie Sie beachten, der Ansatz eher allgemein ist. Im Gegensatz dazu eine Klasse, die ein EventListenerList kann ein gewisses Maß an Laufzeit erhalten geben Sicherheit bei der Verwendung als angegeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top