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')); |
sex toys for men
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
best Workout dvd 2017
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
women’s plus size clothing
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
dooney and bourke leather satchel
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
woven leather tote
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
jumper women’s clothing
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
hatsan refurbished air rifles
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
new hatsan air rifles
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
large crossbody bags
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
travel tote with wheels
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
leather tote handbags
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
mk cynthia medium leather satchel
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
cute crossbody bags
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
luggage sets on sale or clearance canada
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
chanel handle bag
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
Top handle chanel bag
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
crossbody bags
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
makita 4 inch angle grinder
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
5 inch makita angle grinder
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
wallpaper table toolstation
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
betsey johnson wallet price
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
Steelerfurypodcast officially announced
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
click to find out more
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
husqvarna chainsaw repair near me
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
Small Leather Zip Wallet
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
wallpaper pasting table argos
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
husqvarna 440 chainsaw
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
husqvarna 435 chainsaw
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
hatsan air weapons rifles for sale
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
read full article
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
hatsan air rifles reviews
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
michael kors jet set travel large chain shoulder tote
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
dooney and bourke handbags
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
545 husqvarna chainsaw
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
pittsburgh digital caliper
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
designer inspired birkin bag
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
vasagle credenza
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
liverwurst recipe
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
watch asian Movies online
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
clay tobacco pipes for sale
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
Monumentalfm officially announced
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
https://Jaoslotpg.com/login/
blog topic