Composite Pattern, un poco de código y poca explicación
Hoy con un poco de tiempo (exactamente media hora de "ocio") me dispuse a leer algunos de los blogs que tengo en los favoritos y llego al Blog de Alejo y veo el diagrama que esta aquí a la derecha y veo que es el diagrama del patrón Composite. De inmediato me dirijo a Google y encuentro información sobre Composite en Wikipedia y con ayuda del código que aparece en la versión en ingles del articulo de Composite logro entenderlo y aplicarlo en un pequeño ejemplo que dejo a continuación.
abstract class Grafico{
abstract public function dibujar();
}
class Triangulo extends Grafico{
private $nombre = '';
public function __construct($nombre = 'unknown'){
$this->nombre = $nombre;
}
public function dibujar(){
echo '-Soy triagulo '.$this->nombre.'.<br>';
}
}
class Contenedor extends Grafico{
private $nombre = '';
private $contenedor = array();
public function __construct($nombre = 'unknown'){
$this->nombre = $nombre;
}
public function dibujar(){
echo 'Soy contenedror '.$this->nombre.'.<br>';
foreach($this->contenedor as $grafico)
$grafico->dibujar();
}
public function add(Grafico $grafico){
$this->contenedor[] = $grafico;
}
public function del(Grafico $grafico){
unset($this->contenedor[$grafico]);
}
}
$tri1 = new Triangulo('1');
$tri2 = new Triangulo('2');
$tri3 = new Triangulo('3');
$contenedor1 = new Contenedor('1');
$contenedor2 = new Contenedor('2');
$contenedor3 = new Contenedor('3');
$contenedor1->add($tri1);
$contenedor1->add($tri2);
$contenedor2->add($tri3);
$contenedor3->add($contenedor1);
$contenedor3->add($contenedor2);
$contenedor3->dibujar();
Si ejecutamos lo anterior devuelve lo siguiente:Soy contenedror 3.
Soy contenedror 1.
-Soy triagulo 1.
-Soy triagulo 2.
Soy contenedror 2.
-Soy triagulo 3.
Saludos. Dario Ocles.


0 comentarios:
Publicar un comentario en la entrada