Adapter Pattern
Hochschule Konstanz
Beschreibung I
• Klassifikation: klassen- oder objektbasiertes Strukturmuster.
• Zweck: Schnittstelle einer Klasse an eine andere von ihren Klienten erwartete Schnittstelle anpassen (Zusammenarbeit trotz inkompatibler Schnittstellen).
2009, Daniel Maier, Design Patterns and Refactoring, HTWG Konstanz
2
• Auch bekannt als: Wrapper.
• Anwendungsbeispiel: Klassenbibliothek bietet Klasse deren Schnittstelle nicht der von der Anwendung verlangten entspricht.
Hochschule Konstanz
Beschreibung II
• Struktur:
Objektbasiert
Klassenbasiert
Hochschule Konstanz
Beschreibung III
• Teilnehmer:
– Ziel: vom Client verwendete Schnittstelle.
– Client: verwendet Objekte mit Zielschnittstelle.
– DasAdaptierte: definiert anzupassende Schnittstelle.
– Adapter: passt Schnittstelle der unpassenden Klasse an Zielschnittstelle an.
2009, Daniel Maier, Design Patterns and Refactoring, HTWG Konstanz
4
Zielschnittstelle an.
• Interaktionen: Clients rufen Operationen auf Adapterobjekten auf.
Der Adapter delegiert den Aufruf an die Adaptierte Klasse und implementiert ggf. fehlende Methoden komplett neu.
Hochschule Konstanz
Beschreibung IV
• Konsequenzen: Klassen- vs. Objekt-Adapter – Klassen-Adapter nur mit Mehrfachvererbung möglich.
– Klassen-Adapter kann, dank Vererbung, Verhalten des Adaptierten überschreiben und muss nicht alle Methoden neu implementieren.
überschreiben und muss nicht alle Methoden neu implementieren.
– Objekt-Adapter verwendet Komposition, das Adaptierte kann also durch Unterklassen dessen (auch zur Laufzeit) ausgetauscht
werden und kann diesen auf einen Schlag neue Funktionalität
Hochschule Konstanz
Implementierung (objektbasiert)
public class Client { public interface Ziel {
public void anfrage();
} public class DasAdaptierte {
public void bestimmteAnfrage() { System.out.println("Führe
Anfrage durch");
} }
public class Adapter implements
2009, Daniel Maier, Design Patterns and Refactoring, HTWG Konstanz
6
public class Client {
public static void main(String[] args) { Ziel adapter = new Adapter();
adapter.anfrage();
} } public class Adapter implements
Ziel {
private DasAdaptierte orginal = new DasAdaptierte();
public void anfrage() {
orginal.bestimmteAnfrage();
} }
Hochschule Konstanz
Abgrenzung
• Dekorierer: erweitert Objekt ohne Schnittstelle zu ändern.
• Proxy: definiert Stellvertreter für anderes Objekt, verändert aber nicht seine Schnittstelle.
• Brücke: dient anderem Zweck: Schnittstelle von ihrer
• Brücke: dient anderem Zweck: Schnittstelle von ihrer
Implementierung trennen. Adapter ändert Schnittstelle eines existierenden Objekts.
Hochschule Konstanz
Literatur
2009, Daniel Maier, Design Patterns and Refactoring, HTWG Konstanz
8