patron de diseño builder (dispositiva)
TRANSCRIPT
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
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
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
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
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.
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
7/23/2019 Patron de Diseño Builder (Dispositiva)
http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 7/23
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.
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.
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.
7/23/2019 Patron de Diseño Builder (Dispositiva)
http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 11/23
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.
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.
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.
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 :
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}
}
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();
}
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);}
}
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);
}}
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();
} }
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();…
}}
7/23/2019 Patron de Diseño Builder (Dispositiva)
http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 22/23
7/23/2019 Patron de Diseño Builder (Dispositiva)
http://slidepdf.com/reader/full/patron-de-diseno-builder-dispositiva 23/23
GRACIAS