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')); |
[…] This post was mentioned on Twitter by Juan Botero, David Rojas. David Rojas said: Nuevo: Videotutorial – Patrones de diseño en PHP – Chain-of-command pattern http://bit.ly/cVsl6w […]
Thanks for sharing the codes
Solo agradecerte lo facil que haces lo complicado.
Por favor sigue actualizando tu pagina con nuevos tutoriales.
Theory Online
Videotutorial
Buy Codeine 30mg Online
Videotutorial
Best Diet Pills for Weight Loss
Videotutorial
lowes snow blower
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
cheapest washing machines
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
plates tableware
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
jabra move wireless bluetooth stereo headphones review
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
find out here
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
top rated snow blowers
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
purell singles advanced hand sanitizer gel
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
walk behind string trimmers reviews
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
queen Elizabeth wedding dress Recreation
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
Champs luggage
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
old topographic maps
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
sour cream salad dressing
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
click the next internet site
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
Prices Of Snow Blowers
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
echo tools makeup brushes
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
vintage alarm clock radios
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
halal marshmallows toronto
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
book that lights up
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
magnetic wall Tiles
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
how far does light travel in a year in meters
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
mg building materials
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
yamaha psr s910 arranger keyboard
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
most powerful handheld vacuums
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
best Electric blower
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
best hair
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
flying bat toys
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
yamaha audio video receiver
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
phanxy blog
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
muscle Food discount code
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
glass sippy cups for toddlers
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
vodafone assistenza cellulari e smartphone
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
hd video projectors
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
offerte telefonia fissa e mobile tutto compreso 2019
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
fosi audio tb20
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
husqvarna electric chainsaws
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
best cordless chainsaw
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
lg cell phone car chargers
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
crc mass air flow sensor cleaner uk
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
mamamoo red moon album cover
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
travel Star products
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
ikea piante vere da esterno
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
tk maxx women’s clothing
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
best portable generators 2020
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web
Videogiochi Di Spider Man
Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web