1. Información general
En este tutorial rápido, veremos el patrón del Adaptador y su implementación de Java.
2. Patrón de adaptador
Un patrón de adaptador actúa como un conector entre dos interfaces incompatibles que, de lo contrario, no se pueden conectar directamente. Un adaptador envuelve una clase existente con una nueva interfaz para que sea compatible con la interfaz del cliente.
El motivo principal detrás del uso de este patrón es convertir una interfaz existente en otra interfaz que el cliente espera. Generalmente se implementa una vez que se diseña la aplicación.
2.1. Ejemplo de patrón de adaptador
Considere un escenario en el que hay una aplicación desarrollada en los EE. UU. Que devuelve la velocidad máxima de los automóviles de lujo en millas por hora (MPH). Ahora necesitamos usar la misma aplicación para nuestro cliente en el Reino Unido que quiere los mismos resultados pero en kilómetros por hora (km / h).
Para solucionar este problema, crearemos un adaptador que convertirá los valores y nos dará los resultados deseados:

Primero, crearemos la interfaz original Movable que se supone que devolverá la velocidad de algunos autos de lujo en millas por hora:
public interface Movable { // returns speed in MPH double getSpeed(); }
Ahora crearemos una implementación concreta de esta interfaz:
public class BugattiVeyron implements Movable { @Override public double getSpeed() { return 268; } }
Ahora crearemos una interfaz de adaptador MovableAdapter que se basará en la misma clase Movable . Puede modificarse ligeramente para producir resultados diferentes en diferentes escenarios:
public interface MovableAdapter { // returns speed in KM/H double getSpeed(); }
La implementación de esta interfaz consistirá en el método privado convertMPHtoKMPH () que se utilizará para la conversión:
public class MovableAdapterImpl implements MovableAdapter { private Movable luxuryCars; // standard constructors @Override public double getSpeed() { return convertMPHtoKMPH(luxuryCars.getSpeed()); } private double convertMPHtoKMPH(double mph) { return mph * 1.60934; } }
Ahora solo usaremos los métodos definidos en nuestro Adaptador y obtendremos las velocidades convertidas. En este caso, la siguiente afirmación será cierta:
@Test public void whenConvertingMPHToKMPH_thenSuccessfullyConverted() { Movable bugattiVeyron = new BugattiVeyron(); MovableAdapter bugattiVeyronAdapter = new MovableAdapterImpl(bugattiVeyron); assertEquals(bugattiVeyronAdapter.getSpeed(), 431.30312, 0.00001); }
Como podemos notar aquí, nuestro adaptador convierte 268 mph a 431 km / h para este caso en particular.
2.2. Cuándo usar el patrón de adaptador
- Cuando un componente externo proporciona una funcionalidad cautivadora que nos gustaría reutilizar, pero es incompatible con nuestra aplicación actual . Se puede desarrollar un adaptador adecuado para que sean compatibles entre sí
- Cuando nuestra aplicación no es compatible con la interfaz que nuestro cliente espera
- Cuando queremos reutilizar código heredado en nuestra aplicación sin realizar ninguna modificación en el código original
3. Conclusión
En este artículo, echamos un vistazo al patrón de diseño del adaptador en Java.
El código fuente completo de este ejemplo está disponible en GitHub.