Don't like ads? PRO users don't see any ads ;-)

Ejemplo de implementación del patrón Builder

By: RicardoGC on Jul 14th, 2012  |  syntax: PHP  |  size: 2.27 KB  |  hits: 22  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /**Ejemplo de diseño de patrón Builder*/
  2.  
  3. /**Clase Producto*/
  4.  
  5. class Pizza {
  6.         var $masa = null;
  7.         var $salsa = null;
  8.         var $relleno = null;
  9.        
  10.         public function setMasa($masa){ $this->masa = $masa; }
  11.         public function setSalsa($salsa){ $this->salsa = $salsa; }
  12.         public function setRelleno($relleno){ $this->relleno = $relleno; }
  13.        
  14.         public function mostrarComponentes(){
  15.                 echo $this->masa." - ".$this->salsa." - ".$this->relleno."";
  16.         }
  17. }
  18.  
  19. /** "Abstract Builder" */
  20.  
  21. abstract class PizzaBuilder {
  22.  
  23.         var $pizza = null;
  24.  
  25.         public function getPizza() { return $this->pizza; }
  26.         public function crearNuevaPizza() { $this->pizza = new Pizza(); }
  27.         public abstract function buildMasa();
  28.         public abstract function buildSalsa();
  29.         public abstract function buildRelleno();
  30. }
  31.  
  32. /** "ConcreteBuilder" */
  33.  
  34. class PicantePizzaBuilder extends PizzaBuilder {
  35.  
  36.         public function buildMasa(){ $this->pizza->setMasa("cocida"); }
  37.         public function buildSalsa(){ $this->pizza->setSalsa("picante"); }
  38.         public function buildRelleno(){
  39.                 $this->pizza->setRelleno("pimienta+salchichón");
  40.         }      
  41. }
  42.  
  43. class HawaiPizzaBuilder extends PizzaBuilder {
  44.  
  45.         public function buildMasa(){ $this->pizza->setMasa("suave"); }
  46.         public function buildSalsa(){ $this->pizza->setSalsa("dulce"); }
  47.         public function buildRelleno(){ $this->pizza->setRelleno("chorizo+alcachofas"); }
  48. }
  49.  
  50. /** "Director" */
  51.  
  52. class Cocina {
  53.  
  54.         var $pizzaBuilder;
  55.  
  56.         public function setPizzaBuilder($pb){ $this->pizzaBuilder = $pb; }
  57.         public function getPizza(){ return $this->pizzaBuilder->getPizza(); }
  58.  
  59.         public function construirPizza() {
  60.                 $this->pizzaBuilder->crearNuevaPizza();
  61.                 $this->pizzaBuilder->buildMasa();
  62.                 $this->pizzaBuilder->buildSalsa();
  63.                 $this->pizzaBuilder->buildRelleno();
  64.         }
  65. }
  66.  
  67.  
  68. /**Como se utilizaría*/
  69.  
  70. include('Cocina.php');
  71. include('PicantePizzaBuilder.php');
  72. include('HawaiPizzaBuilder.php');
  73.  
  74. $cocina = new Cocina();
  75. $hawai_pizzabuilder = new HawaiPizzaBuilder();
  76. $picante_pizzabuilder = new PicantePizzaBuilder();
  77.  
  78. $cocina->setPizzaBuilder($hawai_pizzabuilder );
  79. $cocina->construirPizza();
  80. $pizza = $cocina->getPizza();
  81. $pizza->mostrarComponentes();
  82.  
  83. $cocina->setPizzaBuilder($picante_pizzabuilder );
  84. $cocina->construirPizza();
  85. $pizza = $cocina->getPizza();
  86. $pizza->mostrarComponentes();