Patrón de diseño Adapter, en PHP
parentesys

Patrón de diseño Adapter, en PHP

El patrón de diseño Adapter se utiliza cuando deseas que una clase existente funcione con otra clase o sistema sin modificar su código original. Es muy útil cuando tienes código antiguo (por ejemplo, legado) o una librería de terceros, y deseas integrarlo con un sistema nuevo que espera una interfaz diferente. El patrón Adapter permite que dos clases incompatibles colaboren adaptando una interfaz a otra.

PARENTESYS | 12 sep 2024


El patrón de diseño Adapter se utiliza cuando deseas que una clase existente funcione con otra clase o sistema sin modificar su código original. Es muy útil cuando tienes código antiguo (por ejemplo, legado) o una librería de terceros, y deseas integrarlo con un sistema nuevo que espera una interfaz diferente. El patrón Adapter permite que dos clases incompatibles colaboren adaptando una interfaz a otra.

Cuándo usar el patrón Adapter:

  1. Integrar código legado: Si tienes clases existentes que no puedes modificar, pero necesitas que se ajusten a una nueva interfaz o requerimiento.
  2. Hacer que dos interfaces sean compatibles: Si tienes dos sistemas o clases que tienen diferentes interfaces y quieres que trabajen juntas sin modificarlas.
  3. Mejorar la extensibilidad: Facilita la adición de nuevas implementaciones o integraciones sin modificar el código existente.

Ejemplo de código con acoplamiento:

Imaginemos que tenemos un sistema de pagos antiguo y queremos integrarlo con un sistema nuevo. El código espagueti es difícil de mantener porque mezcla la lógica del sistema nuevo con el antiguo de manera desordenada.

class PagoAntiguo {
    public function realizarPago($monto) {
        echo "Procesando el pago de: $monto mediante el sistema antiguo.\n";
    }
}

class SistemaDePagos {
    public function procesarPago($monto) {
        // Lógica para decidir qué sistema usar
        if ($monto < 1000) {
            $pago = new PagoAntiguo();
            $pago->realizarPago($monto);
        } else {
            echo "Procesando el pago de: $monto mediante el nuevo sistema de pagos.\n";
        }
    }
}

// Ejecución del código espagueti
$sistema = new SistemaDePagos();
$sistema->procesarPago(500);  // Usa el sistema antiguo
$sistema->procesarPago(1500); // Usa el sistema nuevo

Problemas del código con acoplamiento:

  1. Difícil de mantener: Si queremos cambiar el sistema antiguo, tenemos que modificar el código del sistema de pagos.
  2. Acoplamiento: El SistemaDePagos está acoplado directamente al sistema de pago antiguo, lo que hace difícil cambiar el comportamiento.
  3. Extensibilidad limitada: Si más tarde agregamos otro sistema de pagos, la lógica en SistemaDePagos se volverá aún más compleja.


Solución con el patrón Adapter:

Podemos implementar un adaptador que convierta la interfaz del sistema de pago antiguo para que funcione con el sistema nuevo, desacoplando ambos.

// El sistema nuevo de pagos tiene su propia interfaz
interface IPago {
    public function pagar($monto);
}

// El sistema antiguo, que no podemos modificar
class PagoAntiguo {
    public function realizarPago($monto) {
        echo "Procesando el pago de: $monto mediante el sistema antiguo.\n";
    }
}

// Adaptador para el sistema antiguo, implementando la interfaz IPago
class PagoAntiguoAdapter implements IPago {
    private $pagoAntiguo;

    public function __construct(PagoAntiguo $pagoAntiguo) {
        $this->pagoAntiguo = $pagoAntiguo;
    }

    public function pagar($monto) {
        // Adaptamos el método antiguo al nuevo
        $this->pagoAntiguo->realizarPago($monto);
    }

}

// Sistema de pagos moderno
class PagoModerno implements IPago {
    public function pagar($monto) {
        echo "Procesando el pago de: $monto mediante el nuevo sistema de pagos.\n";
    }
}

// El cliente ahora no necesita preocuparse sobre cuál sistema se usa
class SistemaDePagos {
    private $adaptador;

    public function __construct(IPago $adaptador) {
        $this->adaptador = $adaptador;
    }

    public function procesarPago($monto) {
        $this->adaptador->pagar($monto);
    }
}

// Uso del sistema con el adaptador

// Para el sistema antiguo
$pagoAntiguo = new PagoAntiguo();
$adaptadorAntiguo = new PagoAntiguoAdapter($pagoAntiguo);
$sistema = new SistemaDePagos($adaptadorAntiguo);
$sistema->procesarPago(500);  // Usa el adaptador del sistema antiguo

// Para el sistema moderno
$pagoModerno = new PagoModerno();
$sistemaModerno = new SistemaDePagos($pagoModerno);
$sistemaModerno->procesarPago(1500);  // Usa el sistema nuevo


Ventajas de usar el patrón Adapter:

  1. Desacoplamiento: Ahora el SistemaDePagos no sabe ni le importa si está usando el sistema antiguo o moderno. Solo interactúa con una interfaz común (IPago).
  2. Extensibilidad: Puedes agregar nuevos sistemas de pago implementando la interfaz IPago sin modificar el código existente.
  3. Código limpio: El código está organizado y fácil de entender. Cada clase tiene una responsabilidad clara.

Resumen:

  • El patrón Adapter se usa para integrar sistemas o clases con interfaces incompatibles sin modificar su código.
  • Ayuda a evitar código espagueti, promoviendo un código más limpio y desacoplado.
  • Facilita la extensibilidad y el mantenimiento del código.

Ayuda a mantener este proyecto.
3,00 EUR

Temas relacionados:

patrón de diseño adapter

php

patrón adaptador

Opiniones de este contenido

Esta web se reserva el derecho de suprimir, por cualquier razón y sin previo aviso, cualquier contenido generado en los espacios de participación en caso de que los mensajes incluyan insultos, mensajes racistas, sexistas... Tampoco se permitirán los ataques personales ni los comentarios que insistan en boicotear la labor informativa de la web, ni todos aquellos mensajes no relacionados con la noticia que se esté comentando. De no respetarse estas mínimas normas de participación este medio se verá obligado a prescindir de este foro, lamentándolo sinceramente por todos cuantos intervienen y hacen en todo momento un uso absolutamente cívico y respetuoso de la libertad de expresión.




 No hay opiniones. Sé el primero en escribir.


Tu opinión

Contenidos Indexados
El Arte del Bonsái Ficus - Variedades

 3
  
 230806

English Adverbios de Frecuencia

 10
  
 214132

Informática Generador de códigos de barras en PHP

 13
  
 176439

Quejas denuncias estafas Descubre quién te visita en Facebook?

 16
  
 151768

English Something - Anything

 2
  
 142874

Marketing digital Cómo ganar dinero con un periódico o revista digital

 2
  
 140270

Informática Mejores herramientas para Eventos Virtuales

 1
  
 110893

OTROS MISCELANEA El permiso por puntos Español

 0
  
 99566

Actualidad Las profesiones que van a desaparecer.

 0
  
 97670

Autores

Admin

Este autor tiene 31 artículos publicados.

PARENTESYS

Este autor tiene 18 artículos publicados.

MILES

Este autor tiene 3 artículos publicados.


Newsletter

Suscríbete a nuestros boletines