Vermittler (Entwurfsmuster)

Ein Vermittler (englisch mediator pattern) ist in der Softwareentwicklung ein Entwurfsmuster, das zur Kategorie der Verhaltensmuster (englisch behavioral patterns) gehört. Das Muster dient zum Steuern des kooperativen Verhaltens von Objekten, wobei Objekte nicht direkt kooperieren, sondern über einen Vermittler.[1] Es ist eines der sogenannten GoF-Muster (siehe Viererbande).

Verwendung

Der Vermittler findet Anwendung, wenn

  • Objekte in einem System auf komplexe Art und Weise kooperieren,
  • die Wiederverwendung von Objekten durch den Bezug auf viele andere Objekte erschwert wird,
  • oder Objekte andere Objekte, mit denen sie kooperieren, nicht kennen können oder sollen.

UML-Diagramm

Akteure

Der Vermittler definiert die Schnittstelle zur Kommunikation mit Kollegen. Der konkrete Vermittler implementiert das kooperative Verhalten durch Koordination der beteiligten Kollegen. Er kennt und verwaltet beteiligte Kollegen. Die einzelnen Kollegen kennen ihren Vermittler und kommunizieren mit ihm statt mit anderen Kollegen.

Vorteile

Die Koordination des kooperativen Verhaltens wird zentral verwaltet. Eine Veränderung des kooperativen Verhaltens kann unabhängig von den beteiligten Kollegen umgesetzt werden. Solche Änderungen des Verhaltens können durch neue konkrete Vermittler erreicht werden. Dadurch wird die Unterklassenbildung eingeschränkt, da die Änderungen nicht in den verschiedenen konkreten Kollegen vorgenommen und dementsprechend viele neue Unterklassen gebildet werden müssen. Das Muster unterstützt eine lose Kopplung zwischen den Kollegen. Das Protokoll der Kollegen wird vereinfacht.

Nachteile

Da der Vermittler ein Verhalten kapselt, das andernfalls auf mehrere Klassen verteilt wird, ist er selbst komplexer als die einzelnen Komponenten es gewesen wären. Es besteht die Gefahr, dass ein monolithischer Programmkomplex entsteht, der schwer wart- und erweiterbar ist.

Anwendungsbeispiele

Ein typisches Beispiel für einen Vermittler ist ein Chatraum. Chatter melden sich beim Chatraum an und ab, um mit anderen Chattern kommunizieren zu können. Sie kommunizieren nicht direkt miteinander, sondern über den Chatraum. Verschiedene konkrete Chaträume können nun unterschiedliche Kommunikationsarten ermöglichen. So kann ein Chatraum Mitteilungen eines Chatters an alle Chatter weiterleiten, ohne dass der Chatter diese kennen muss. Ein anderer Chatraum kann hingegen nur die Kommunikation zwischen einzelnen Chattern ermöglichen. Möchte man die Kommunikation um eine Protokollierung erweitern, erweitert man dazu einen konkreten Chatraum, während die Chatter nicht betroffen sind.

Ein Mediator-basiertes Informationssystem ist ein auf dem Vermittlerkonzept aufbauendes Informationssystem.

Verwandte Entwurfsmuster

Kollegen können den Vermittler beobachten und umgekehrt.

Einzelnachweise

  1. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Entwurfsmuster. 5. Auflage. Addison-Wesley, 1996, ISBN 3-8273-1862-9, S. 385. 
VD
Entwurfsmuster
Erzeugungsmuster

Abstrakte Fabrik | Erbauer | Fabrikmethode | Prototyp | Singleton | Multiton | Objektpool

Strukturmuster

Adapter | Brücke | Decorator | Fassade | Fliegengewicht | Kompositum | Stellvertreter

Verhaltensmuster

Beobachter | Besucher | Interpreter | Iterator | Kommando | Memento | Schablonenmethode | Strategie | Vermittler | Zustand | Zuständigkeitskette | Interceptor | Nullobjekt | Protokollstapel

Muster für objektrelationale Abbildung

Datentransferobjekt | Table Data Gateway | Row Data Gateway | Active Record | Unit of Work | Identity Map | Lazy Loading | Identity Field | Dependent Mapping | Embedded Value | Serialized LOB | Inheritance Mapper | Metadata Mapping | Query Object | Command-Query-Responsibility-Segregation

Nachrichtenübermittlungsmuster

Message | Command Message | Document Message | Event Message | Request-Reply | Return Address | Correlation Identifier | Message Sequence | Message Expiration | Format Indicator | Message Channel | Point-to-Point Channel | Publisher-Subscriber Channel | Datatype Channel | Invalid Message Channel | Dead Letter Channel | Guaranteed Delivery | Channel Adapter | Messaging Bridge | Message Bus | Pipes-and-Filters | Message Router | Content-based Router | Message Filter | Dynamic Router | Recipient List | Splitter | Aggregator | Resequencer | Composed Message Processor | Scatter-Gather | Routing Slip | Process Manager | Message Broker | Message Translator | Envelope Wrapper | Content Enricher | Content Filter | Claim Check | Normalizer | Canonical Data Model | Message Endpoint | Messaging Gateway | Messaging Mapper | Transactional Client | Polling Consumer | Event-driven Consumer | Competing Consumers | Message Dispatcher | Selective Consumer | Durable Subscriber | Idempotent Receiver | Service Activator | Control Bus | Detour | Wire Tap | Message History | Message Store | Smart Proxy | Test Message | Channel Purger

Andere

Application Controller | Business Delegate | Data Access Object | Dependency Injection | Extension Interface | Fluent Interface | Inversion of Control (IoC) | Lock | Model View Controller (MVC) | Model View Presenter (MVP) | Model View Update (MVU) | Model View ViewModel (MVVM) | Page Controller | Registry | Remote Facade | Repository | Service Locator | Session State | Table Module | Template View | Threadpool | Transaction Script | Transform View | Two-Step View | Value Object