Mediator - Koll3g/DesignPatterns GitHub Wiki
Absicht
Mediator ist ein Design Pattern, mit dem Sie chaotische Abhängigkeiten zwischen Objekten reduzieren können. Das Muster schränkt die direkte Kommunikation zwischen den Objekten ein und zwingt sie, nur über ein Vermittlungsobjekt zusammenzuarbeiten.
Problem
Angenommen, man hat einen Dialog zum Erstellen und Bearbeiten von Kundenprofilen. Es besteht aus verschiedenen Formularsteuerelementen wie Textfeldern, Kontrollkästchen, Schaltflächen usw.
Einige der Formularelemente können mit anderen interagieren. Wenn Sie beispielsweise das Kontrollkästchen „Ich habe einen Hund“ auswählen, wird möglicherweise ein verstecktes Textfeld für die Eingabe des Hundenamens angezeigt. Ein weiteres Beispiel ist die Senden-Schaltfläche, die die Werte aller Felder validieren muss, bevor die Daten gespeichert werden.
Wenn man diese Logik direkt im Code der Formularelemente implementiert, erschwert Sie die Wiederverwendung der Klassen dieser Elemente in anderen Formen der App erheblich. Beispielsweise können Sie diese Checkbox-Klasse nicht in einem anderen Formular verwenden, da sie an das Textfeld des Hundes gekoppelt ist. Man kann entweder alle Klassen verwenden, die an der Darstellung des Profilformulars beteiligt sind, oder gar keine.
Lösung
Das Mediator-Muster schlägt vor, dass man jede direkte Kommunikation zwischen den Komponenten vermeiden sollte. Stattdessen müssen diese Komponenten indirekt zusammenarbeiten, indem sie ein spezielles Vermittlerobjekt aufrufen, das die Aufrufe an geeignete Komponenten umleitet. Dadurch hängen die Komponenten nur noch von einer einzigen Mediatorklasse ab, anstatt an Dutzende ihrer Kollegen gekoppelt zu sein.
In unserem Beispiel mit dem Profilbearbeitungsformular kann die Dialogklasse selbst als Vermittler fungieren. Höchstwahrscheinlich kennt die Dialog-Klasse bereits alle ihre Unterelemente, sodass Sie nicht einmal neue Abhängigkeiten in diese Klasse einführen müssen.
UML Diagram
Vorteile
- Grundsatz der Einzelverantwortung. Sie können die Kommunikation zwischen verschiedenen Komponenten an einem einzigen Ort extrahieren, was das Verständnis und die Verwaltung erleichtert.
- Open/Closed-Prinzip. Sie können neue Mediatoren einführen, ohne die eigentlichen Komponenten ändern zu müssen.
- Sie können die Kopplung zwischen verschiedenen Komponenten eines Programms reduzieren.
- Sie können einzelne Komponenten leichter wiederverwenden.
Nachteile
- Mit der Zeit kann sich ein Mediator zu einem God Object entwickeln.