Patron builder

Post on 29-Jan-2018

319 views 0 download

Transcript of Patron builder

Erika Alexandra Alvarez Gómez

Su intención es de abstraer el proceso de creación de unobjeto completo, centralizando dicho proceso en un únicopunto, de tal forma que el mismo proceso de construcciónpueda crear representaciones diferentes.

Utilizado para permitir la creación de objetos complejos apartir de un objeto fuente.

El objeto fuente contiene varias partes queindividualmente contribuyen a la creación de cada objetocomplejo a través de un conjunto de llamadas a interfacescomunes de la clase Abstract Builder.

BUILDER: Interfaz abstracta para crear productos

CONCRETE BUILDER: Implementación del Builder Construye y reúne las partes necesarias para construir los productos

DIRECTOR: Construye un objeto usando el patrón Builder

PRODUCTO: El objeto complejo bajo construcción.

1. El cliente crea el objeto Director y lo configura con el objeto Builder deseado (HawaiPizza por ejemplo).

2. El Director notifica al constructor cuando una parte del producto se debe construir.

3. El Builder maneja los requerimientos desde el director y agrega partes al producto.

4. El Cliente recupera el producto desde el constructor.

package Clases;

import javax.swing.JApplet;

public 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();

}}

Director: Cocina

package Clases;

import javax.swing.JApplet;

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

}

Builder: Pizza

package Clases;

import javax.swing.JApplet;

public 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: PizzaBuilder

package Clases;

import javax.swing.JApplet;

public class HawaiPizzaBuilder extends PizzaBuilder {

public void buildMasa() { pizza.setMasa("suave"); }public void buildSalsa() { pizza.setSalsa("dulce"); }public void buildRelleno() { pizza.setRelleno("chorizo+alcachofas"); }

}

Producto: HawaiPizzaBuilder

package Clases;

import javax.swing.JApplet;

public class PicantePizzaBuilder extends PizzaBuilder {

public void buildMasa() { pizza.setMasa("cocida"); }public void buildSalsa() { pizza.setSalsa("picante"); }public void buildRelleno() { pizza.setRelleno("pimienta+salchichón"); }

}

Producto: PicantePizzaBuilder

https://www.youtube.com/watch?v=M1VOvNaiJPc

Reduce el acoplamiento. Permite variar la representación interna de estructuras

complejas. Se independiza del código de construcción de la representación. Cada ConcreteBuilder tiene el código especifico para crear y

modificar una estructura interna concreta. Permite un mayor control en el proceso de creación del objeto.