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')); |
Gps For Aviation
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
now joe ultra 18 in. 15 amp electric snow blower review
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
portable wifi video camera
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
abbigliamento sportivo femminile
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
games with time travel
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
musica indie italiana 2017
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
dog biscuit mix
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
Hatsan Flash pup
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
3dim-athin.att.sch.gr official
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
red lobster gluten free cheddar bay biscuit mix
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
aviation gps apps
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
bracciale activity tracker
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
qled televisions
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
covert video surveillance equipment
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
candele profumate fanno male
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
ikea piante vere
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
reviews on handheld vacuums
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
alipotec
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
http://www.graphis.xyz`s statement on its official blog
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
artego opinioni
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
bracciali pandora con ciondoli
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
teppanyaki grill plate argos
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
king canada génératrice
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
dark ages dresses recreation
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
must have baby travel gear
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
Home depot televisions
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
harvest crunch cereal healthy
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
top smartwatches 2019
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
donner musical instruments
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
scaffali porta piante ikea
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
earthquake tiller mc43 manual
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
ph test strips for pool
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
flip clock radios
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
tavistock and jones radio controlled watch instructions
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
zainetti eleganti carpisa
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
Apexcam 4K 16mp
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
buttermilk biscuit mix
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
best buy apple laptop computers
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
how long do batteries last in xbox one controller
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
black cat banned apparel
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
best ebook readers
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
john deere lawn mowers for sale near me
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
videogiochi lego
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
Computer Printers That Use Less Ink
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
best designer tote bags for travel
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
photo detector for lifi
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
shower base and walls
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
swiss dive watches
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
borse messenger piccole
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
la croft dei videogiochi
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web