Hola como andan? estaba estudiando el patrón builder y hay una parte que no la alcanzo a entender si alguien tuviera un tiempito me podría explicar como funciona? desde ya muchisimas gracias.
Les copio el ejemplo entero. Pero la duda que yo tengo es la parte /** "Director" */ muchas gracias.
Código:
/** "Producto" */
class Pizza {
private String masa = "";
private String salsa = "";
private String relleno = "";
public void setMasa(String masa) { this.masa = masa; }
public void setSalsa(String salsa) { this.salsa = salsa; }
public void setRelleno(String relleno) { this.relleno = relleno; }
}
/** "Abstract Builder" */
abstract class PizzaBuilder {
protected Pizza pizza;
public Pizza getPizza() { return pizza; }
public void crearNuevaPizza() { pizza = new Pizza(); }
public abstract void buildMasa();
public abstract void buildSalsa();
public abstract void buildRelleno();
}
/** "ConcreteBuilder" */
class HawaiPizzaBuilder extends PizzaBuilder {
public void buildMasa() { pizza.setMasa("suave"); }
public void buildSalsa() { pizza.setSalsa("dulce"); }
public void buildRelleno() { pizza.setRelleno("chorizo+alcachofas"); }
}
/** "ConcreteBuilder" */
class PicantePizzaBuilder extends PizzaBuilder {
public void buildMasa() { pizza.setMasa("cocida"); }
public void buildSalsa() { pizza.setSalsa("picante"); }
public void buildRelleno() { pizza.setRelleno("pimienta+salchichón"); }
}
/** "Director" */
class Cocina {
private PizzaBuilder pizzaBuilder;
public void setPizzaBuilder(PizzaBuilder pb) { pizzaBuilder = pb; }
public Pizza getPizza() { return pizzaBuilder.getPizza(); }
public void construirPizza() {
pizzaBuilder.crearNuevaPizza();
pizzaBuilder.buildMasa();
pizzaBuilder.buildSalsa();
pizzaBuilder.buildRelleno();
}
}
/** Un cliente pidiendo una pizza. */
class BuilderExample {
public static void main(String[] args) {
/**El cliente crea un director y lo configura con el objeto builder deseado
Cocina cocina = new Cocina();
/** Se crean las diferentes representaciones
PizzaBuilder hawai_pizzabuilder = new HawaiPizzaBuilder();
PizzaBuilder picante_pizzabuilder = new PicantePizzaBuilder();
/** Se manda a construir el objeto desde el director
cocina.setPizzaBuilder( hawai_pizzabuilder );
cocina.construirPizza();
/** Se asigna el resultado a producto
Pizza pizza = cocina.getPizza();
}
}