Descarga la aplicación para disfrutar aún más
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.
Compartir