Para terminar la serie de screencasts sobre patrones de diseño en PHP, os enseñaré en qué consiste el chain-of-command pattern (cadena de mando), también llamado patrón cadena de responsabilidad. En él creamos una serie de objetos receptores y un objeto emisor que les envía una petición, estableciendo una cadena en la que el comando de petición recorre todos los posibles objetos receptores hasta que uno de ellos responde ejecutando el comando.
De esta manera el emisor no tiene conocimiento de qué receptor va a ejecutar el comando, favoreciendo el acoplamiento débil.
Ver screencast (duración: 8:05)
- Descargar videotutorial en alta calidad – MOV (14 MB)
- Descargar videotutorial optimizado para iPod/iPhone – M4V (9 MB)
Podéis ver el resto de videotutoriales en la página de screencasts, o suscribiros al podcast de iTunes.
Ejemplo de implementación
Primero creamos el interfaz que implementarán los objetos receptores, seguido de la clase emisora CommandChain, que será la encargada de mantener la lista de instancias de los objetos receptores y pasarles las peticiones a éstos.
<?php interface ICommand{ function onCommand($comando, $args); } class CommandChain{ private $_commands = array(); public function addCommand($cmd){ $this->_commands[] = $cmd; } public function runCommand($comando, $args){ foreach($this->_commands as $cmd){ if($cmd->onCommand($comando, $args)) return; } } } |
A continuación creamos las clases de los objetos receptores SMSCommand y MailCommand, que implementan el interfaz ICommand.
class SMSCommand implements ICommand{ public function onCommand($comando, $args){ if($comando!='NotifyUser' || $args['metodo']!='sms') return false; echo("SMSCommand ejecutando $comando. Notificando usuario ".$args['user']. " via SMS.\n"); return true; } } class MailCommand implements ICommand{ public function onCommand($comando, $args){ if($comando!='NotifyUser' || $args['metodo']!='mail') return false; echo("SMSCommand ejecutando $comando. Notificando usuario ".$args['user']. " via Email.\n"); return true; } } |
Finalmente, para utilizarlo instanciamos el gestor CommandChain y le añadimos los objetos receptores, para después llamar a su método runCommand que enviará el comando a dichos objetos y sólo uno de ellos responderá dependiendo de un criterio, en este caso del argumento metodo.
$c = new CommandChain(); $c->addCommand(new SMSCommand()); $c->addCommand(new MailCommand()); $c->runCommand('NotifyUser', array('metodo' => 'mail', 'user' => 'test')); |
https://mua-ban-bida.click/
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
sites
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
try this web-site
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
watch this video
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
visit the following web site
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
linked internet site
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
More hints
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web