patron de diseño builder (dispositiva)

23
7/23/2019 Patron de Diseño Builder (Dispositiva) http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 1/23 PATRONES DE DISEÑO BUILDER UNIVERSIDAD NACIONAL DE TRUJILLO

Upload: rosalbarodriguezsandoval

Post on 19-Feb-2018

230 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 1/23

PATRONES DE DISEÑO

BUILDER 

UNIVERSIDAD NACIONAL DE TRUJILLO

Page 2: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 2/23

PATRON DE DISEÑO

BUILDER  Patrones creacionales de diseño.

Permite separar la construcción de un objeto

complejo de su representación. Se usa para evitar situaciones de

acoplamiento

Page 3: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 3/23

CARACTERISTICAS:

Valores por OMISIÓN No contiene atributos con el modificador

final El orden en que se ejecutan los métodos

NO ES DETERMINANTE Ser un concepto PROBADO La solución NO ES OBVIA Describe participantes y RELACIONES

entre ellos El patrón tiene un COMPONENTEHUMANO significativa

Page 4: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 4/23

COMPONENTES DEL PATRON DE DISEÑO BUILDER

• Builder: Interfaz abstracta para crear productos.

• Concrete Builder: _ Implementación del Builder _ Construye y reúne las partes necesarias para construir los productos

Page 5: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 5/23

• Director: Construye un objeto usando el patrón Builder

• Product: Representa al objeto complejo en construcción.

Page 6: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 6/23

EJEMPLO:Fábrica de vehículos

Page 7: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 7/23

Page 8: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 8/23

Pasos y Aplicabilidad:

Problema al que ataca:

• El incremento de clases y objetos usados.

• Objetos complejos hechos de partes producidas por otros objetosque necesitan especial cuidado cuando se empiezan a construir.

• Necesidad de un mecanismo para producir objetos complejos quesean independientes unos de otros cuando se crea el objeto.

• No se protegen los detalles de los objetos de presentación con

respecto a la lógica de creación.

• Construcción y representación de un objeto complejo estánunidas.

Page 9: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 9/23

Este patrón es útil en alguno de los siguientes supuestos:

Cuando el algoritmo para crear un objeto complejo puede independizarse de

las partes que componen el objeto y de cómo son ensambladas.

Cuando el proceso de construcción debe permitir distintas representaciones

para el objeto que se construye.

Cuando el objeto a construir es complejo y sus distintas configuraciones son

limitadas. En caso de que necesitemos un objeto complejo pero cada una de

sus partes deba ser configurado de forma individual (en el ejemplo que nos

ocupa, se trataría de definir cada elemento “al gusto” del consumidor en lugar

de objetos predefinidos), este patrón no será una buena idea, ya que será

necesario realizar el proceso de asignación de cada elemento paso a paso.

El algoritmo para creación de un objeto complejo debe ser independiente de

las partes que conforman el objeto y cómo están ensambladas.

El proceso de construcción debe permitir diferentes representaciones del

objeto que se construye.

Page 10: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 10/23

Pasos:

 Al final los pasos para la correcta utilización del patrón son lossiguientes:

El Cliente crea un objeto Director y lo configura con el objeto

Builder.

El Director notifica al constructor cuando una parte del Producto

se debe construir.

El Builder maneja las peticiones del Director y agrega las partes

al Producto.

El Cliente el producto del Builder.

Page 11: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 11/23

Page 12: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 12/23

I. Consecuencias:

Se nos permite variar la representación interna del Producto: como el

producto se construye a través de una interfaz abstracta, para cambiar la

representación interna del producto basta con definir un nuevo tipo de

constructor.

Se nos permite separar el código de la construcción y la representación.

Permite variar la representación interna de un producto.

Permite separar el código de la construcción y la representación.

Da control refinado sobre el proceso de construcción.

Page 13: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 13/23

VENTAJAS E INCONVENIENTESEl patrón Builder facilita la gestión del flujo de control durante la

creación de objetos complejos. Esto se manifiesta de dos formas:

• Para objetos que necesitan una creación en fases (una secuencia

de pasos para lograr que le objetivo se active), el objeto Builder 

actúa como un objeto de alto nivel que supervisa el proceso.

Puede coordinar y validar la creación de todos los recursos y, si

fuera necesario proporcionar una estrategia de emergencia encaso de que ocurra un error.

• Para objetos que durante la creación necesitan recursos existente

en el sistema, como conexiones a la base de datos u objetos de

negocio existentes, el objeto Builder proporciona un punto de

acceso centralizado para gestionar esos recursos. Builder también

proporciona un único punto de control de creación para susproductos, que puede ser utilizado por otros objetos del sistema. al

igual que otros patrones de creación, esto facilita las cosas para

los clientes de sistema de software, porque solo necesitan acceder 

al objeto Builder para obtener un recurso.

Page 14: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 14/23

El principal inconveniente de este patrón esque hay un alto grado de acoplamiento entre el

objeto Builder, su producto y cualquier otro

delegado para la creación utilizado durante la

construcción de objetos. Los cambios quesucedan en el producto creado por el Builder a

menudo generan modificaciones tanto para el

objeto Builder como para sus delegados.

Page 15: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 15/23

IMPLEMENTACIÓN:

Ejemplo:Una pizzería la cual ladescribiremos de la siguiente manera

Una cocina: Director

Las pizzas: Product Las diferentes variedades de pizzas:

ConcreteBuilder

Ahora implementaremos el código :

Page 16: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 16/23

class Pizza {private String base;

private String salsa;private String ingredientes;

 //Aca implementamos los métodos set y get es decirlos métodos de lectura y retorno para cada

 // atributo

Public Void setBase(String base){this.base = base}Public Void setSalsa(String salsa){this.salsa = salsa}Public Void setIngredientes(String

ingredients){this.ingredientes=ingredientes}Public String getBase(){return base}Public String getSalsa(){return salsa}Public String getIngredientes(){return ingredientes}

}

Page 17: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 17/23

Luego implementaremos el patrón Builder de lasiguiente manera :

abstract class PizzaBuilder {

protected Pizza pizza;public Pizza getPizza() {

return this.pizza;}

public void createPizzaProduct() {this.pizza = new Pizza();

}

public abstract void hacerBase();public abstract void hacerSalsa();public abstract void hacerIngredientes();

}

Page 18: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 18/23

Luego implementaremos las clases Concrete Builder en la cualespecificaremos obiamente las clases de pizza que produciremos:

En este caso : barbacoa , carbonara , mediterránea ;

class Carbonara extens PizzaBuilder {public void hacerBase() {

this.pizza.setBase(FINA);

}

public void hacerSalsa() {this.pizza.setSalsa(NATA);

}

public void hacerIngredientes() {this.pizza.setIngredientes(BACON + CEBOLLA);}

}

Page 19: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 19/23

class Barbacoa extens PizzaBuilder {public void hacerBase() {

this.pizza.setBase(GRUESA);}

public void hacerSalsa() {this.pizza.setSalsa(TOMATE);

}

public void hacerIngredientes() {this.pizza.setIngredientes(CARNE + CARNE);

}

}

class Mediterranea extens PizzaBuilder {public void hacerBase() {

this.pizza.setBase(EXTRA_FINA);}

public void hacerSalsa() {

this.pizza.setSalsa(NO);}

public void hacerIngredientes() {this.pizza.setIngredientes(ACEITUNA + ALCACHOFA);

}}

Page 20: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 20/23

Y por ultimo representaremos a la clase director en la cual searmara la pizza porasí decirlo:

class Cook {private PizzaBuilder pizzaBuilder;

public void setPizzaBuilder(PizzaBuilder pb) {this.pizzaBuilder = pb;

}

public Pizza getPizza() {return this.pizzaBuilder.getPizza();

}

public void hacerPizza() {pizzaBuilder.createPizzaProduct();

pizzaBuilder.hacerBase();pizzaBuilder.hacerSalsa();pizzaBuilder.hacerIngredientes();

} }

Page 21: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 21/23

Ahora solo nos faltaria el codigo del “main” o elprincipal , es decir donde ejecutaremos y veremosque todo función correctamente

public class Main {public static void main(String[] args) {

Cook cook = new Cook();PizzaBuilder carbonaraB = new Carbonara();

cook.setPizzaBuilder(carbonaraB);cook.hacerPizza();

Pizza pizza = cook.getPizza();…

}}

Page 22: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 22/23

Page 23: Patron de Diseño Builder (Dispositiva)

7/23/2019 Patron de Diseño Builder (Dispositiva)

http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 23/23

GRACIAS