Patrones de diseño de software: Adaptador
El patrón adaptador es un patrón de diseño estructural que permite la colaboración de objetos con interfaces incompatibles.
¿Qué problema resuelve el patrón adaptador?
Un “problema típico”, que el patrón adaptador resuelve, es el que está relacionado con APIs y aplicaciones de terceros. Por ejemplo, si estás utilizando una aplicación que descarga datos de diferentes fuentes en formato XML para mostrarlos de forma atractiva a tus usuarios, y luego quieres mejorar la aplicación integrando una biblioteca que solo funciona con datos en formato JSON.
Para que no tengas que cambiar la biblioteca para que funcione con XML - con todos los efectos secundarios posibles -, puedes crear un adaptador. Un adaptador es un objeto especial que convierte la interfaz de un objeto para que otro objeto pueda entenderlo.
Un adaptador envuelve uno de los objetos para ocultar la complejidad de la conversión que ocurre detrás de escena. No solo puede convertir datos en varios formatos, sino que también puede ayudar a que objetos con diferentes interfaces colaboren. Por tanto, volviendo a nuestro “problema típico”, para resolver el dilema de los formatos incompatibles, puedes crear adaptadores de XML a JSON.
¿Cuándo usar el patrón Adaptador (Adapter)?
Deberías usar la clase Adaptador cuando quieras usar alguna clase existente, pero su interfaz no es compatible con el resto de tu código. El patrón Adaptador te permite crear una clase de capa intermedia que sirve como traductor entre tu código y una clase de terceros.
Además, podrías usar este patrón cuando desees reutilizar varias subclases existentes que no tengan funcionalidades comunes. Podrías colocar la funcionalidad que falta en una clase de adaptador. Eso sí, las clases de destino deben tener una interfaz común y el campo del adaptador debe seguir esa interfaz.
Pros y contras del patrón adaptador
Los siguientes son algunos de los “pros y cons” de este patrón:
Pros | Contras |
|
|
“Show me the code”
Si te interesa ver el patrón adaptador en acción, puedes ver el ejemplo en PHP de refactoring.guru.
En el ejemplo del “mundo real” verás cómo el patrón adaptador te permite usar clases heredadas o de terceros. En este caso, en lugar de reescribir la interfaz de notificación de tu aplicación para admitir cada servicio de terceros (p.ej. Slack), puedes crear un conjunto de envoltorios que adaptan las llamadas de tu aplicación a una interfaz y formato requerido por cada clase de terceros.
¿Utilizas el patrón Adapter en tus proyectos? ¿Qué tal la experiencia? ¡Coméntalo abajo!
Fuente: