Design Pattern #9

Autor: NathalieOhneHerz GitHub

Das Adapter Pattern

Wie du kannst das nicht lesen? Adaptier es!

Hauptartikel: [Design Pattern #1] Was sind die Design patterns


Im Folgenden soll das Adapter Pattern genauer beleuchtet werden.


Was ist das Adapter Pattern und wann verwendet man es?

Wann immer es zwischen zwei Interfaces nicht so funken will, man könnte sagen sie haben Beziehungsstress und passen nicht zu einander, kommt das Adapter Pattern zum Einsatz. Es soll die inkompatiblen Interfaces unter einen Hut bringen und zwischen ihnen vermitteln. Das Adapter Pattern lässt sich den Strukturmustern zuordnen. Das Adapter Pattern wird ebenfalls benutzt, um eine vorhandene API zu erweitern. "Ich habe nicht das Interface, das ich will!" - Kein Problem, wir bauen uns einen Adapter. In unserem Beispiel haben wir ein zweidimensionales Array und wollen es als HashMap darstellen. Die Map an sich stellt keine Methode dafür bereit.


Modellierung


Implementierung in Java

package de.nathalieoneill.devtek.adapter; import java.util.AbstractMap; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * @author Nathalie */ public class MapAdapter<K, V> extends AbstractMap<K, V> { private final Map<K, V> handle; public MapAdapter(Object[][] objects) { this.handle = new HashMap<K, V>(); for (Object[] object : objects) { this.handle.put((K) object[0], (V) object[1]); } } public Set<Entry<K, V>> entrySet() { return handle.entrySet(); } }

Die Verwendung sähe dann so aus:

package de.nathalieoneill.devtek.adapter; /** * @author Nathalie */ public class DevTek { public static void main(String[] args) { final Object[][] squares = { {3, 9}, {4, 16}, {5, 25} }; final MapAdapter<Integer, Integer> mapAdapter = new MapAdapter<Integer, Integer>(squares); System.out.println("Squares: " + mapAdapter); } }

Ich hoffe dass ich euch das Adapter Pattern näher bringen konnte, auch wenn das Beispiel diesmal sehr abstrakt ist. Ein vielleicht komplexeres aber bessere Beispiel ist: https://github.com/aadnk/ProtocolLib/blob/master/modules/API/src/main/java/com/comphenix/protocol/events/PacketAdapter.java - Auch hier: Das Packet stellt keine Methoden zum Empfangen und Senden bereit. Egal, Adapter regelt.

Mit freundlichen Grüßen
Nathalie