2009-06-08 7 views
3

Also für ein aktuelles Projekt, gibt es grundsätzlich drei Haupt Java-Klassen:Funktioniert Mediator Pattern in dieser Situation?

  1. GUI
  2. Instant Messaging
  3. Computation

Im Wesentlichen muss es volle Kommunikation sein, so dass wir‘ Ich habe mich dafür entschieden, den Mediator-Ansatz zu verwenden, anstatt der GUI die Ausführung des gesamten Projekts zu erlauben.

Grundsätzlich wird der Mediator die Kommunikation kapseln. Das Problem, auf das wir gestoßen sind, besteht darin, wie die GUI-Komponenten aktualisiert werden können, ohne eine Menge Methoden zu entwickeln, die der Mediator jederzeit aufrufen kann, wenn etwas abgeschlossen ist.

Ex. Nehmen wir an, die GUI möchte den Benutzer anmelden, sie durchläuft den Mediator, um einen Thread zu erstellen und sich anzumelden, aber dann muss der Mediator den Erfolg/Fehler zurück an die GUI weiterleiten sowie eine Statusnachricht aktualisieren.

Das andere Problem ist Dinge, die die GUI aktualisieren müssen, aber den Moderator nicht benötigen. Ist es praktisch, der GUI zu erlauben, eine Instanz dieser Klasse zu erstellen und sie auszuführen oder sollte alles durch den Mediator gehen?

Unser ursprüngliches Design hatte nur die GUI, die alles managte, aber es wirklich Wiederverwendbarkeit tötete. Gibt es in diesem Fall eine bessere Designmethode?

Antwort

3

Wenn Sie feststellen, dass Observer zu viel Aufwand verursacht, kann Mediator der beste Weg sein. Ich denke definitiv, dass Sie nicht die GUI die Show laufen lassen sollten. Wenn Sie das Mediator-Muster verwenden, sollte der Mediator selbst verantwortlich sein. Etwas, das Sie in Betracht ziehen könnten, ist eine Variante des Befehlsmusters. Wenn Sie Ruby verwenden würden, würde ich empfehlen, Funktionsrückrufe zu übergeben, um zu vermeiden, dass der Mediator die GUI für jede Kleinigkeit kontaktiert. Da es sich jedoch um Java handelt, kann eine Art der Kapselung einer Aktion im Befehlsmuster-Stil hilfreich sein.

0

Wenn Sie den Rückruf/Benachrichtigung nicht wollen durch den Vermittler getriggert werden, können Sie den Rückruf in die Login-Funktion einschleusen und Login aufrufen, wenn es fertig ist.

Ich weiß nicht, wie Sie den Rückruf in Java injizieren würde, obwohl. In einer Sprache, in der die Funktionen erstklassig sind, könntest du einfach die Funktion übergeben, aber du bist in Java, also denke ich, dass du das Befehlsmuster verwenden musst, wie es kmorris vorgeschlagen hat.

0

Sie könnten auch versuchen, die GUI der Mediator ein Rückrufobjekt geben, die die Rückgabewerte oder Einstellung Griffe Abrufen von was auch immer Sie Werte benötigen (eine Version des Command-Muster). Es würde dann einen pro Anruf von der GUI zum Vermittler geben.

Ein weiterer Gedanke ist, die Methoden zur Gruppe der Mediator in semantisch verwandte Stücke nennt. Insbesondere wenn der Mediator hat Abschnitte, in denen es mehrere GUI-Methoden in einer Reihe zu nennen neigt:

gui.a() 
    gui.b() 
    gui.c() 

Sie eine Methode erstellen, die das Ergebnis des Aufrufs alle drei Griffe. Der Vorteil von semantisch gruppiert Methoden (das heißt setFileInformation über setFileMenu, setTab, etc.) ist auch dann, wenn Sie die GUI ändern müssen, können die Inhalte der Methoden ändern, aber der Ruf der Mediator macht auch nicht.

Verwandte Themen