Adapter Muster Design Muster Design Pattern?

1 Antwort

Zunächst mal ist ein Adapter etwas, dass eine Klasse "passend" macht. Das kannst Du dir wie einen Steckeradapter für die Steckdose vorstellen. Normalerweise passt der Stecker nicht, mit dem Adapter geht es dann aber doch.

In deinem Beispiel wird das nicht passen auch angezeigt: "Schnittstellen passen nicht". Einmal hat man das Interface java.util.List und einmal das Interface BestellungIF.

Adapter selbst ist eine neue Klasse. Die Aufgabe dieses Adapters ist es das inkompatible "Adaptee" Interface auf das Zielinterface "Target" zu mappen.

Oder anders gesagt der Adapter bekommt den inkompatiblen Typen "Adaptee" und mappt ihn nach außen hin auf das benötigte Interface "Target".

Damit das auch schön funktioniert, implementiert der Adapter das Zielinterface "Target". Wer immer also das Zielinterface benutzt, kann auch einen Adapter bekommen. Der Nutzer weiß nur "ich habe hier ein Zielinterface" und arbeitet damit. Der Nutzer weiß also gar nicht, dass es sich um einen Adapter handelt.

Hilft dir das?

Im Zweifel schreib doch mal eine Klasse, die nur mit einem ganz bestimmten Interface klar kommt. Dann sollst Du aber ein anderes Interface nutzen, ohne natürlich die Basisklasse zu verwenden. Eine Lösung wäre ein Adapter.

In deinem konkreten Beispiel hast Du eine Klasse die mit BestellungIF arbeitet. Auf der anderen Seite hast Du aber nur java.util.List gefüllt mit Bestellposition.

Die Klasse kann aber nur mit BestellungIF umgehen und nicht mit java.util.List. Eine Lösung ist also ein Adapter, der die Liste so mapped, dass das BestellungIF erfüllt wird.

Du schreibst also eine neue Klasse "ListBestellungAdapter" (blöder Name). Dieser Adapter bekommt die java.util.List mit Bestellpositionen. Außerdem implementiert der Adapter BestellungIF. Du musst also alle Methoden so schreiben, dass die Bestellpositionen der Liste so gemapped werden, dass BestellungIF erfüllt wird.

Nun kannst Du einen neuen Adapter instanzieren und ihm eine List mit Bestellpositionen geben. Den Adapter kannst Du dann an die Klasse weitergeben, die nur mit BestellungIF klar kommt. Diese "konsumierende" Klasse musstest Du für die Adapterimplementierung nicht anfassen.

Gruß