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

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

  1. this site dice:

    this site

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

  2. mouse click the next site

    blog topic

  3. https://www.speedrun.com/

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

  4. visit the following post

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

  5. Read the Full Piece of writing

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

  6. this link dice:

    this link

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

  7. use Molbiol dice:

    use Molbiol

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

  8. a cool way to improve

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

  9. relevant internet site

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

  10. similar resource site

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

  11. speaking of dice:

    speaking of

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

  12. Orcid`s latest blog post

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

  13. Learn Alot more Here

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

  14. intimatefriend.click

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

  15. use Truereason here

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

  16. visit my homepage

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

  17. Highly recommended Internet site

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

  18. click here to visit 9signal for free

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

  19. you can look here

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

  20. just click the up coming post

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

  21. click through the up coming web page

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

  22. Get Source dice:

    Get Source

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

  23. simply click the following page

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

  24. visit my web page

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

  25. click here. dice:

    click here.

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

  26. click here to investigate

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

  27. use Hottips here

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

  28. check out this blog post via befine.click

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

  29. learn here dice:

    learn here

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

  30. you can try here

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

  31. wisebusiness.click

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

  32. Learn Additional Here

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

  33. shield control cable

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

  34. just click the next article

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

  35. click the next website page

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

  36. Read the Full Guide

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

  37. website dice:

    website

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

  38. please click the next document

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

  39. click through the up coming page

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

  40. click through the up coming post

    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