Hola ya casi terminando con los patrones creacionales, hoy vamos a ver el patrón Builder.
Patrones de Diseño - ¿Que es el Patrón de Diseño Builder / Constructor ?
Separar la construcción de un objeto complejo de su representación, de modo que el mismo proceso de construcción pueda crear representaciones diferentes.
Diagrama UML
AbstractBuilder: Posee los métodos que pueden realizar un builder y tambien una propiedad con el objeto a crear.
ProductoBase: Es el objeto base a crear.
EspecificOneBuilder/EspecificTwoBuilder: Constructor que posee los métodos implementados.
ManangerBuilder: Ejecuta los métodos del builder a fin de constuir un objeto puntual., el builder es pasado por parámetro.
Nombre del patrón:
Patrón Builder / Constructor
Clasificación del Patrón:
Creacional
Intención:
Abstrae el proceso de creación de un objeto complejo, centralizando dicho proceso en un único punto, de tal forma que el mismo proceso de construcción pueda crear representaciones diferentes.
Ejemplo:
Ejemplo sacado del GoF - Problema: Pizzeria.
Pizza
AbstractBuilder
PizzaFugazzetaBuilder
PizzaMuzarellaBuilder
ManagerBuilder
Pizzeria
package ar.com.patronesdisenio.builder.producto;
public class Pizza {
private String ingredientes;
public String getIngredientes() {
return ingredientes;
}
public void setIngredientes(String ingredientes) {
this.ingredientes = ingredientes;
}
@Override
public String toString() {
return "Ingredientes: " + ingredientes;
}
}
package ar.com.patronesdisenio.builder;
import ar.com.patronesdisenio.builder.producto.Pizza;
public abstract class AbstractBuilder {
private Pizza pizza;
public AbstractBuilder(){
this.pizza = new Pizza();
}
public abstract void juntarIngredientes();
public abstract void amazar();
public abstract void cocinar();
public Pizza getPizza() {
return pizza;
}
public void setPizza(Pizza pizza) {
this.pizza = pizza;
}
}
package ar.com.patronesdisenio.builder.builders;
import ar.com.patronesdisenio.builder.AbstractBuilder;
public class PizzaFugazzetaBuilder extends AbstractBuilder{
@Override
public void juntarIngredientes() {
this.getPizza().setIngredientes("Cebolla");
}
@Override
public void amazar() {
System.out.println("Amazando...");
}
@Override
public void cocinar() {
System.out.println("Cocinando...");
}
}
package ar.com.patronesdisenio.builder.builders;
import ar.com.patronesdisenio.builder.AbstractBuilder;
public class PizzaMuzarellaBuilder extends AbstractBuilder{
@Override
public void juntarIngredientes() {
this.getPizza().setIngredientes("Tomate");
}
@Override
public void amazar() {
System.out.println("Amazando...");
}
@Override
public void cocinar() {
System.out.println("Cocinando...");
}
}
package ar.com.patronesdisenio.builder.manager;
import ar.com.patronesdisenio.builder.AbstractBuilder;
import ar.com.patronesdisenio.builder.producto.Pizza;
public class ManagerBuilder {
private AbstractBuilder ab;
public ManagerBuilder (AbstractBuilder ab){
this.ab = ab;
}
public Pizza hacerPizza(){
this.ab.juntarIngredientes();
this.ab.amazar();
this.ab.cocinar();
return ab.getPizza();
}
}
package ar.com.patronesdisenio.builder.exec;
import ar.com.patronesdisenio.builder.builders.PizzaMuzarellaBuilder;
import ar.com.patronesdisenio.builder.manager.ManagerBuilder;
import ar.com.patronesdisenio.builder.producto.Pizza;
public class Pizzeria {
/**
* @param args
*/
public static void main(String[] args) {
ManagerBuilder mb = new ManagerBuilder(new PizzaMuzarellaBuilder());
Pizza pizza = mb.hacerPizza();
System.out.println(pizza.toString());
}
}
Patrones de Diseño - Patrón Builder - ¿Que es el Patrón de Diseño Builder / Constructor ?
Reviewed by El lado oscuro de java
on
noviembre 06, 2014
Rating:
No hay comentarios: