Patrones de Diseño - Patrón Builder - ¿Que es el Patrón de Diseño Builder / Constructor ?

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

Patrones de Diseño - Patrón Builder - ¿Que es el Patrón de Diseño Builder / Constructor ?

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.

Patrones de Diseño - Patrón Builder - ¿Que es el Patrón de Diseño Builder / Constructor ?

Pizza
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;
}
}


AbstractBuilder
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;
}

}


PizzaFugazzetaBuilder
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...");
}
}


PizzaMuzarellaBuilder
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...");
}

}


ManagerBuilder
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();
}

}


Pizzeria
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 ? 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: 5

No hay comentarios:

Con la tecnología de Blogger.