Adapter

Een adapter vertaalt tussen verschillende interfaces zodat jouw code één uniforme manier houdt om een taak uit te voeren, zelfs als achterliggende libraries anders werken.

Situatie

Stel: je hebt een WhatsApp-, Signal- en Telegram-library. Ze versturen allemaal berichten maar met andere methoden en parameter-namen. Een adapter legt één laag erboven met een generieke sendMessage($message) zodat de rest van je code geen library-details hoeft te kennen.

Hypothetische adapter-implementatie
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
class WhatsAppClient { public function sendWhatsApp(string $message): void {} } class SignalClient { public function sendSignal(string $message): void {} } class TelegramClient { public function sendTelegram(string $message): void {} } class MessageAdapter { public function __construct(private WhatsAppClient $wa, private SignalClient $si, private TelegramClient $tg) {} public function sendMessage(string $message): void { // Kies een kanaal of loop eroverheen $this->wa->sendWhatsApp($message); $this->si->sendSignal($message); $this->tg->sendTelegram($message); } }
  • Aanroepers gebruiken alleen sendMessage; wisselen van library breekt je applicatie niet.
  • Adapters zijn ideaal bij legacy code of third-party libraries met afwijkende signatures.