Logo Studenta

Qué es el patrón de diseño Chain of Responsibility y cómo s

¡Estudia con miles de materiales!

Vista previa del material en texto

¿Qué es el patrón de diseño Chain of Responsibility y cómo se aplica en PHP? 
 
El patrón de diseño "Chain of Responsibility" (Cadena de Responsabilidad) es un patrón de 
comportamiento que permite a una serie de objetos procesar una solicitud de manera secuencial 
hasta que uno de ellos pueda manejarla. Cada objeto en la cadena tiene un enlace al siguiente 
objeto en la secuencia, de modo que si un objeto no puede manejar la solicitud, la pasa al siguiente 
objeto de la cadena y así sucesivamente. 
 
El propósito de este patrón es desacoplar el remitente de una solicitud de sus receptores y permitir 
que más de un objeto tenga la oportunidad de manejar la solicitud sin tener que conocer 
explícitamente quién lo hará. 
 
En el patrón "Chain of Responsibility", hay dos componentes principales: 
 
1. Handler (Manejador): Es una interfaz o clase abstracta que define un método común para manejar 
solicitudes. También puede contener un puntero al siguiente manejador en la cadena. 
 
2. ConcreteHandler (Manejador Concreto): Son las implementaciones concretas de la interfaz 
Handler. Cada manejador concreto decide si puede manejar una solicitud y, si no puede, la pasa al 
siguiente manejador en la cadena. 
 
Ahora, veamos cómo se aplica el patrón "Chain of Responsibility" en PHP: 
 
Supongamos que tenemos una serie de validaciones que deben realizarse en una solicitud y 
queremos que cada validación se maneje por separado. 
 
1. Primero, definimos la interfaz `Handler`: 
 
```php 
interface Handler 
{ 
 public function setNext(Handler $handler): Handler; 
 public function handle(Request $request): ?string; 
} 
``` 
 
2. Luego, implementamos una clase concreta de `Handler`: 
 
```php 
class ConcreteHandler implements Handler 
{ 
 private ?Handler $nextHandler = null; 
 
 public function setNext(Handler $handler): Handler 
 { 
 $this->nextHandler = $handler; 
 return $handler; 
 } 
 
 public function handle(Request $request): ?string 
 { 
 // Aquí realizamos la lógica para manejar la solicitud 
 // Si este manejador no puede manejar la solicitud, la pasa al siguiente manejador en la cadena 
 
 if ($this->nextHandler !== null) { 
 return $this->nextHandler->handle($request); 
 } 
 
 return null; // Si ningún manejador puede manejar la solicitud, devolvemos null 
 } 
} 
``` 
 
3. Finalmente, creamos una cadena de objetos `Handler` y los conectamos en orden: 
 
```php 
// Crear los manejadores 
$handler1 = new ConcreteHandler(); 
$handler2 = new ConcreteHandler(); 
$handler3 = new ConcreteHandler(); 
 
// Conectar los manejadores en orden 
$handler1->setNext($handler2); 
$handler2->setNext($handler3); 
 
// Procesar una solicitud a través de la cadena de responsabilidad 
$resultado = $handler1->handle($request); 
``` 
 
En este ejemplo, si `$handler1` no puede manejar la solicitud, la pasa a `$handler2`, y si `$handler2` 
no puede manejarla, la pasa a `$handler3`. Si ninguno de los manejadores puede manejar la 
solicitud, se devuelve `null`. 
 
El patrón "Chain of Responsibility" es útil cuando tienes múltiples objetos que pueden procesar una 
solicitud de manera diferente y quieres desacoplar el código del cliente de la lógica de manejo 
específica. Puedes agregar o eliminar manejadores sin afectar el código del cliente y asegurarte de 
que cada solicitud sea atendida de manera adecuada por el manejador correspondiente en la 
cadena.

Continuar navegando