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. sex toys for men

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

  2. best Workout dvd 2017

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

  3. women’s plus size clothing

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

  4. dooney and bourke leather satchel

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

  5. woven leather tote

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

  6. jumper women’s clothing

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

  7. hatsan refurbished air rifles

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

  8. new hatsan air rifles

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

  9. large crossbody bags

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

  10. travel tote with wheels

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

  11. leather tote handbags

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

  12. mk cynthia medium leather satchel

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

  13. cute crossbody bags

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

  14. luggage sets on sale or clearance canada

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

  15. chanel handle bag

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

  16. Top handle chanel bag

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

  17. crossbody bags

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

  18. makita 4 inch angle grinder

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

  19. 5 inch makita angle grinder

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

  20. wallpaper table toolstation

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

  21. betsey johnson wallet price

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

  22. Steelerfurypodcast officially announced

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

  23. click to find out more

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

  24. husqvarna chainsaw repair near me

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

  25. Small Leather Zip Wallet

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

  26. wallpaper pasting table argos

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

  27. husqvarna 440 chainsaw

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

  28. husqvarna 435 chainsaw

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

  29. hatsan air weapons rifles for sale

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

  30. read full article

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

  31. hatsan air rifles reviews

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

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

  33. dooney and bourke handbags

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

  34. 545 husqvarna chainsaw

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

  35. pittsburgh digital caliper

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

  36. designer inspired birkin bag

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

  37. vasagle credenza

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

  38. liverwurst recipe

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

  39. watch asian Movies online

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

  40. clay tobacco pipes for sale

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

  41. Monumentalfm officially announced

    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