Muster: Adapter
Adapter
[Bearbeiten]Ein Adapter passt die Schnittstelle einer (externen) Funktionalität an.
Zweck
[Bearbeiten]Es wird ermöglicht eine Anwendung gegen ein Interface zu schreiben, welches auf eine externe Funktionalität (z.B. Bibliothek eines Fremdherstellers) verweist. Dabei wird eine Unterklasse dieses Interfaces verwendet, um die externe Klasse anzusteuern. Notwendig ist dies beispielsweise dann, wenn auf eine Bibliothek, deren Parametertypen nicht mit dem restlichen Programm vereinbar sind, zugegriffen werden soll. In einem solchen Fall kann ein Adapter, der eine Konvertierung vornimmt und den Anruf im Anschluss weiterleitet, Abhilfe schaffen.
UML
[Bearbeiten]Entscheidungshilfen
[Bearbeiten]Wenn die Funktionalität extern bereits zur Verfügung steht, jedoch nicht zu der Funktionsweise bzw. zum internen Aufbau (z.B. Namensgebung, Parametertypen) passt, dann kann ein Adapter eingesetzt werden. Allerdings sollte im Einzelfall geprüft werden, ob stattdessen nicht ein Refactoring der bereits bestehenden Funktionalität dem Einsatz eines Adapters vorzuziehen wäre - was natürlich nur dann möglich ist, wenn der Quellcode vorliegt.
Implementation
[Bearbeiten]- Ein Interface, welches die Funktionalität des Adapters definiert.
- Eine konkrete Implementierung des Adapters, welche sich der externen Funktionalität bedient, um die angebotene Schnittstelle zu realisieren.
Neben der Architektur, wie sie in obigem UML-Diagram skizziert ist, ist es auch möglich, dass der Adapter zusätzlich von der externen Klasse erbt.
Beispiele sind verfügbar in den Sprachen
Verwandte Muster
[Bearbeiten]Eine Brücke (engl. bridge) kann verwendet werden, um flexibel zwischen verschiedenen Adaptern zu wechseln. Der Stellvertreter reicht Aufrufe ebenfalls weiter - allerdings mit dem Unterschied, dass dieser und die Klasse, die die eigentliche Funktionalität bereitstellt, dieselbe Schnittstelle aufweisen; der Mechanismus ist also dem des Adapters ähnlich, der Zweck jedoch ein anderer.
Weblinks
[Bearbeiten]Wikipedia: Adapter (Entwurfsmuster)