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

  • Principio de responsabilidad única. Puedes separar la interfaz o el código de conversión de datos de la lógica de negocio principal del programa

  • Principio abierto/cerrado. Puedes introducir nuevos tipos de adaptadores en el programa si romper el código de cliente existente

  • La complejidad general del código aumenta porque necesitas introducir un conjunto de nuevas interfaces y clases.

“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: