El patrón Adaptador permite que la interfaz de una clase existente sea utilizada como otra interfaz. Es útil cuando una clase no puede interactuar directamente con otra clase debido a diferencias en sus interfaces, y necesitas que trabajen juntas. El Adaptador actúa como un intermediario que permite la colaboración entre objetos con interfaces incompatibles.
Ejemplo de Adaptador en Java:
Supongamos que tienes una interfaz Objetivo
que espera un método request()
:
// Interfaz Objetivo
interface Objetivo {
void solicitud();
}
Y tienes una clase Adaptado
que tiene un método metodoEspecifico()
pero no implementa la interfaz Objetivo
:
// Clase Adaptado
class Adaptado {
void metodoEspecifico() {
System.out.println("Método metodoEspecifico de Adaptado");
}
}
Para hacer que la clase Adaptado
sea compatible con la interfaz Objetivo
, puedes crear un adaptador llamado Adaptador
:
// Adaptador
class Adaptador implements Objetivo {
private Adaptado adaptado;
public Adaptador(Adaptado adaptado) {
this.adaptado = adaptado;
}
@Override
public void solicitud() {
adaptado.metodoEspecifico();
}
}
Ahora, puedes utilizar el Adaptador
para que la clase Adaptado
sea utilizada como si fuera un Objetivo
:
public class Principal {
public static void main(String[] args) {
// Utilizando Adaptado a través del Adaptador
Adaptado adaptado = new Adaptado();
Objetivo adaptador = new Adaptador(adaptado);
// Utilizando la interfaz Objetivo
adaptador.solicitud();
}
}
Cuándo usar el patrón Adaptador:
- Integración de Código Existente:
- Cuando necesitas integrar un componente existente con una interfaz incompatible en tu sistema.
- Reutilización de Clases:
- Para reutilizar una clase existente que no tiene la interfaz requerida, en lugar de modificar su código.
- Colaboración entre Códigos Independientes:
- Cuando trabajas con bibliotecas o módulos de terceros y deseas que se comuniquen con tu código de manera uniforme.
- Adaptación a Interfaces Existentes:
- Cuando trabajas con una interfaz que no es compatible con la interfaz que tu código espera, y no puedes modificar la interfaz existente.
- Encapsulación y Desacoplamiento:
- Para desacoplar el código existente del código nuevo, proporcionando una interfaz común sin modificar el código existente.
El patrón Adaptador es particularmente útil en situaciones donde la interoperabilidad entre sistemas o componentes es esencial y las interfaces no son compatibles directamente. Proporciona una forma de hacer que las clases trabajen juntas sin modificar su código fuente.