Vermittler-Muster
Das Mediator-Muster wird verwendet, um die Kommunikationskomplexität zwischen mehreren Objekten und Klassen zu verringern, und es ist ein Verhaltensmuster.
Das Mediator-Muster definiert ein Mediator-Objekt, um die Interaktionen zwischen einer Reihe von Objekten zu kapseln. Der Mediator ermöglicht es Objekten, explizite gegenseitige Referenzen zu vermeiden, wodurch ihre Kopplung gelockert wird und die Interaktionen zwischen ihnen unabhängig geändert werden können.
Einführung
Absicht
Durch die Einführung eines Mediator-Objekts, das die Interaktionen zwischen mehreren Objekten kapselt und koordiniert, wird die Kopplung zwischen den Objekten reduziert.
Wesentliche gelöste Probleme
- Es löst komplexe Eins-zu-viele-Assoziationsprobleme zwischen Objekten, vermeidet hohe Kopplung zwischen Objekten und vereinfacht die Systemstruktur.
Anwendungsfall
- Wenn mehrere Klassen im System miteinander gekoppelt sind und eine Netzwerkstruktur bilden.
Implementierungsansatz
- Definiere die Mediator-Schnittstelle: Gibt die Schnittstelle an, die der Mediator implementieren muss.
- Erstelle den konkreten Mediator: Implementiert die Mediator-Schnittstelle und enthält die Logik zur Koordinierung der Interaktionen zwischen Kollegenobjekten.
- Definiere die Kollegenklasse: Jedes Objekt muss nicht mehr explizit auf ein anderes verweisen, sondern interagiert über den Mediator.
Schlüsselcode
- Mediator: Kapselt die Interaktionslogik zwischen Objekten.
- Kollegenklassen: Kommunizieren über den Mediator.
Anwendungsbeispiel
- WTO: Nachdem China der WTO beigetreten ist, handeln Länder über die WTO, was bilaterale Beziehungen vereinfacht.
- Flughafen-Dispositionssystem: Koordiniert Starts und Landungen von Flugzeugen, die Nutzung von Start- und Landebahnen usw.
- MVC-Framework: Der Controller fungiert als Vermittler zwischen dem Modell und der View.
Vorteile
- Komplexität reduzieren: Wandelt die Eins-zu-viele-Beziehung zwischen mehreren Objekten in eine Eins-zu-eins-Beziehung um.
- Entkopplung: Objekte verweisen nicht mehr direkt aufeinander; sie interagieren über den Vermittler.
- Entspricht dem Gesetz von Demeter: Objekte müssen nur den Vermittler kennen, nicht andere Objekte.
Nachteile
- Vermittler-Komplexität: Der Vermittler kann riesig und komplex werden, was die Wartung erschwert.
Verwendungshinweise
- Wenn im System komplexe Referenzbeziehungen zwischen Objekten bestehen, sollte die Verwendung des Vermittler-Musters in Betracht gezogen werden.
- Kapseln Sie das Verhalten mehrerer Klassen durch den Vermittler, um die Erzeugung zu vieler Unterklassen zu vermeiden.
Hinweise
- Vermeiden Sie die Verwendung des Vermittler-Musters, wenn Zuständigkeiten unklar oder chaotisch sind, da dies dazu führen kann, dass der Vermittler zu viele Zuständigkeiten übernimmt.
Struktur
Das Vermittler-Muster umfasst die folgenden Hauptrollen:
Vermittler: Definiert eine Schnittstelle zur Kommunikation mit jedem Kollegenobjekt und verwaltet die Beziehungen zwischen den Kollegenobjekten. Er enthält normalerweise eine oder mehrere Ereignisbehandlungsmethoden zur Verarbeitung verschiedener Interaktionsereignisse.
Konkreter Mediator: Implementiert die Mediator-Schnittstelle und ist für die Implementierung der Kommunikationslogik zwischen Kollegenobjekten verantwortlich. Es hält Referenzen auf jedes Kollegenobjekt und koordiniert deren Interaktionen.
Kollegenobjekte (Colleague): Definiert eine Schnittstelle für die Kommunikation mit dem Mediator. Sie enthält normalerweise eine Methode zum Senden von Nachrichten und eine Methode zum Empfangen von Nachrichten.
Konkreter Kollege: Implementiert die Schnittstelle des Kollegenobjekts und ist das Objekt, das tatsächlich an der Interaktion teilnimmt. Es sendet seine Nachrichten an den Mediator, der sie an andere Kollegenobjekte weiterleitet.
Implementierung
Wir demonstrieren das Mediator-Muster anhand eines Chatraum-Beispiels. In diesem Beispiel können mehrere Benutzer Nachrichten an den Chatraum senden, und der Chatraum zeigt Nachrichten allen Benutzern an. Wir erstellen zwei KlassenChatRoomundUser。UserObjektverwendungChatRoomMethoden, um ihre Nachrichten zu teilen.
MediatorPatternDemo, unsere Demonstrationsklasse verwendetUserObjekte, um die Kommunikation zwischen ihnen anzuzeigen.
Schritt 1
Erstelle die Mediator-Klasse.
ChatRoom.java
Schritt 2
Erstelle die Klasse User.
User.java
Schritt 3
Verwendung vonUser-Objekten zur Anzeige der Kommunikation zwischen ihnen.
MediatorPatternDemo.java
Schritt 4
Programm ausführen, Ergebnis ausgeben:
Thu Jan 31 16:05:46 IST 2013 [Robert] : Hi! John! Thu Jan 31 16:05:46 IST 2013 [John] : Hello! Robert!Weitere Erweiterungen