Patrón de Diseño Adaptador en Java:

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:

  1. Integración de Código Existente:
    • Cuando necesitas integrar un componente existente con una interfaz incompatible en tu sistema.
  2. Reutilización de Clases:
    • Para reutilizar una clase existente que no tiene la interfaz requerida, en lugar de modificar su código.
  3. 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.
  4. 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.
  5. 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.