Videotutorial – Patrones de diseño en PHP – Chain-of-command

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)

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'));

142 comentarios para “Videotutorial – Patrones de diseño en PHP – Chain-of-command”

  1. Gps For Aviation

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  2. 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

  3. portable wifi video camera

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  4. abbigliamento sportivo femminile

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  5. games with time travel

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  6. musica indie italiana 2017

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  7. dog biscuit mix

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  8. Hatsan Flash pup

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  9. 3dim-athin.att.sch.gr official

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  10. 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

  11. aviation gps apps

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  12. bracciale activity tracker

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  13. qled televisions

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  14. covert video surveillance equipment

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  15. candele profumate fanno male

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  16. ikea piante vere

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  17. reviews on handheld vacuums

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  18. alipotec dice:

    alipotec

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  19. 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

  20. artego opinioni

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  21. bracciali pandora con ciondoli

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  22. teppanyaki grill plate argos

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  23. king canada génératrice

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  24. dark ages dresses recreation

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  25. must have baby travel gear

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  26. Home depot televisions

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  27. harvest crunch cereal healthy

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  28. top smartwatches 2019

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  29. donner musical instruments

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  30. scaffali porta piante ikea

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  31. earthquake tiller mc43 manual

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  32. ph test strips for pool

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  33. flip clock radios

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  34. tavistock and jones radio controlled watch instructions

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  35. zainetti eleganti carpisa

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  36. Apexcam 4K 16mp

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  37. buttermilk biscuit mix

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  38. best buy apple laptop computers

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  39. 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

  40. black cat banned apparel

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  41. best ebook readers

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  42. 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

  43. videogiochi lego

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  44. Computer Printers That Use Less Ink

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  45. best designer tote bags for travel

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  46. photo detector for lifi

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  47. shower base and walls

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  48. swiss dive watches

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  49. borse messenger piccole

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

  50. la croft dei videogiochi

    Videotutorial – Patrones de diseño en PHP – Chain-of-command « David Rojas – Diseño y desarrollo web

Deja un comentario

Time limit is exhausted. Please reload the CAPTCHA.

RSS iTunes podcast Twitter

Categorías

Enlaces

Archivos