Verhaltensmuster: Vermittler


... [ Seminar Objektorientierter Entwurf] ... [ Thema Entwurfsmuster ] ... [ Literaturverzeichnis ] ...

šbersicht: Verhaltensmuster: Vermittler


Vermittler

( Mediator ) Ist ein objektbasiertes Verhaltensmuster.


Zweck

Es wird das Zusammenspiel einer Menge von Objekten durch einem Objekt gekapselt. Der Vermittler f÷rdert die lose Kopplung von Objekten, indem er die Kommunikation zwischen den Objekten übernimmt. Dadurch können Sie das Zusammenspiel der Objekte zu variieren.


Motivation

Stellen sie sich vor, Sie haben eine Programmoberfläche von einem windowsorientierten Programm. Dort haben Sie viele visuelle Objekte. Damit Sie eine Funktionalität unter den Objekten bekommen, müssen Sie jedes Objekt jedem anderen Objekt bekannt machen, eine Referenz übergeben. Dabei den Überblick zubehalten wird schwer. Wenn ein neues Objekt hinzugefügt werden soll, ist das mit viel Arbeit verbunden. Das neue Objekt muß allen anderen Objekten bekannt gemacht werden und selber von allen anderen erfahren. Das gesamte System wird zu einem monolitthischen Klotz. Dieses Problem können wir mit dem Vermittlermuster lösen.


vermitt1.gif nicht gefunden...

Anstatt daß sich die Listbox, das Eingabefeld und der Knopf direkt kennen und bezug zueinandern haben, wird hier ein ZeichensatzDialogDirektor eingesetzt. Der ZeichensatzDialogDirektor kennt als einziger alle Widgetobjekte und "vermittelt" zwischen ihnen, ohne daß die Widgetobjekte voneinander wissen. Die Widgetobjekte kennen nur den ZeichensatzDialogDirektor.
Sie wollen z.B. wenn sich die Auswahl in der ListBox ändert, soll der ausgewählte Eintrag im Eingabefeld erscheinen. Folgende Interaktionen werden im Vermittlermuster durchgeführt:


vermitt2.gif nicht gefunden...

  1. Die Listbox meldet ihrem Direktor, daß sie sich geändert hat.
  2. Der Direktor holt sich die Auswahl von der Listbox.
  3. Der Direktor gibt die Auswahl an das Eingabefeld weiter.
Nun können noch weitere Aktionen ausgelöst werden, weil das Eingabefeld geändert wurde.
Die folgende Struktur hat das ebengenannte Beispiel:


vermitt3.gif nicht gefunden...


Anwendbarkeit


Das Vermittlermuster sollten Sie in den folgenden Situatoinen verwenden:


Struktur


vermitt4.gif nicht gefunden...


Teilnehmer


Interaktion

Die Kollegen senden und empfangen Anfragen von/zu einem Vermittlerobjekt. Der Vermittler leitet diese Anfragen zwischen den richtigen Kollegenobjekten weiter. Dadurch wird das Gesamtverhalten implementiert.


Konsequenzen

  1. Es schränkt die Unterklassenbildung ein.
    Um das Verhalten des ganzen Systems zu ändern, muß lediglich die Vermittlerklasse abgeleitet werden. Die Kollegenklassen verwenden Sie ohne Änderung wieder.
  2. Es entkoppelt Kollegenobjekte.
    Ein Vermittler unterstützt die lose Kopplung von Kollegenobjekten. Die Kollegen- und Vermittlerklassen sind unabhängig voneinander.
  3. Es vereinfacht die Struktur eines Objekts.
    Die n-zu-n Beziehungen zwischen den Kollegnobjekten wird durch 1-zu-n Beziehungen zwischen dem Vermittler und den Kollegenobjekten ersetzt. 1-zu-n Beziehungen sind einfachen zu er- und bearbeiten.
  4. Es abstrahiert davon, wie Objekte zusammenarbeiten.
    Sie können durch die Anwendung des Vermittlermusters sich auf die Interaktionen zwischen den Kollegenobjekten konzentrieren. Dies kann Ihnen dabei helfen, die Zusammenarbeit ihrer Objekte mit dem System zu erklären.
  5. Es zentralisiert die Steuerung.
    Die Komplexität der Interaktion zwischen Kollegenobjekten wird durch die Komplexität des Vermittlers getauscht. Dadurch kann der Vermittler ein sehr kompliziertes und schwer zu wartendes Objekt werden.


Implementierung

  1. Weglassen der abstrakten Vermittlerklasse.
    Eine abstrakte Vermittlerklasse ist nur dann Notwendig, wenn die Kollegenobjekte mit mehr als einem Vermittler zusammenarbeiten sollen. Das gleiche gilt auch für die abstrakte Kollegenklasse.
  2. Die Interaktion von Kollegen- und Vermittlerklassen
    Die Benachrichtigung von Kollegenklassen zur Vermittlerklasse kann als Beobachtermuter implementiert werden.
    Ein anderer Ansatz ist, daß die Kollegenobjekte eine spezialisierte Schnittstelle zum Vermittler benutzen und sich selbst übergeben. So kann der Vermittler feststellen von wem er benachrichtigt wurde. Smalltalk/V für Windows benutzt diese Art der Delegation. Java nutzt eine Ähnliche.


Beispielcode

Java benutzt auch das Vermittlermuster. Java hat Listboxen, Eingabefelder und auch Buttons. Die Vermittlerklasse ist entweder eine von Applet abgeleitet Klasse oder eine von Frame abgeleitet Klasse.
Die Kollegenobjekte benachrichtigen den Vermittler unter Zuhilfenahme der ListenerInterfaces, dieses Interface wird durch Mehrfachvererbung in den Vermittler mitaufgenommen. Der Vermittler reagiert dann darauf und koordiniert.
public class ZeichensatzDialogDirektor extends Applet implements ItemListener{

        private Button 	   m_button;  // Das sind die Kollegenobjekte
	private List       m_list;
	private TextField  m_texfeld;

	public void Init(){
          m_button = new Button("OK");
          m_list = new List(4, false);
          m_list.addItem("chicago"); 
          m_list.addItem("courier"); 
          m_list.addItem("palatino"); 
          m_list.addItem("times roman"); 
          m_textfeld = new TextField(20);
          add(m_button);
          add(m_list);
          add(m_textfeld);
          addItemListener(this);
        }

	public void itemStateChanged(ItemEvent e)      // die Vermittlung zwischen
	{                                              // Listbox und TextField 
		String cmd = e.getItemSelectable();
                m_textfeld.setText(cmd);
	}

}


Bekannte Verwendungen


Verwandte Muster


... [ Seminar Objektorientierter Entwurf] ... [ Thema Entwurfsmuster ] ... [ Strukturmuster: Fassade] ... [ Literaturverzeichnis ] ...