Adapter

Adapter es un patrón de diseño estructural que permite la colaboración entre objetos con interfaces incompatibles.

Ejemplo en TypeScript

Supongamos que tienes un sistema que proporciona datos en formato JSON, pero necesitas trabajar con una biblioteca que espera datos en formato XML. Aquí es donde puedes usar un adaptador para convertir los datos de JSON a XML y viceversa.

typescriptCopy code// Interfaz objetivo (Target)
interface XMLParser {
  parseXML(): void;
}

// Adaptee (Clase que proporciona JSON)
class JSONData {
  public data: any;

  constructor(data: any) {
    this.data = data;
  }

  // Método que muestra datos JSON
  displayJSON(): void {
    console.log("JSON Data:", this.data);
  }
}

// Adaptador
class Adapter implements XMLParser {
  private jsonData: JSONData;

  constructor(jsonData: JSONData) {
    this.jsonData = jsonData;
  }

  // Implementación del método de la interfaz objetivo
  parseXML(): void {
    // Lógica para convertir JSON a XML
    console.log("XML Data:", `<root>${JSON.stringify(this.jsonData.data)}</root>`);
  }
}

// Cliente
const jsonData = new JSONData({ name: "John", age: 30 });
jsonData.displayJSON();

const adapter = new Adapter(jsonData);
adapter.parseXML();

Explicación

  1. XMLParser: Define la interfaz objetivo que el cliente espera usar.

  2. JSONData: Es la clase existente que proporciona datos en formato JSON.

  3. Adapter: Es la clase adaptadora que implementa la interfaz XMLParser y utiliza la clase JSONData para realizar la conversión de datos de JSON a XML.

  4. Cliente: Utiliza la clase JSONData para mostrar los datos en formato JSON y la clase Adapter para convertir los datos a XML, permitiendo que ambas interfaces incompatibles trabajen juntas.

Este ejemplo ilustra cómo el patrón Adaptador puede ser utilizado para integrar sistemas con interfaces incompatibles, permitiendo la reutilización de código y facilitando la interoperabilidad entre diferentes componentes del sistema.

Last updated