sistemas de la informaciÓn patrones de diseño. patrón builder 1 - introducción 2 -...

14
SISTEMAS DE LA SISTEMAS DE LA INFORMACIÓN INFORMACIÓN Patrones de diseño Patrones de diseño

Upload: venceslas-velo

Post on 02-Apr-2015

109 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SISTEMAS DE LA INFORMACIÓN Patrones de diseño. Patrón BUILDER  1 - Introducción  2 - Características  3 - Propósito  4 – Diagrama  5 – Código de

SISTEMAS DE LA SISTEMAS DE LA INFORMACIÓNINFORMACIÓN

Patrones de diseñoPatrones de diseño

Page 2: SISTEMAS DE LA INFORMACIÓN Patrones de diseño. Patrón BUILDER  1 - Introducción  2 - Características  3 - Propósito  4 – Diagrama  5 – Código de

Patrón BUILDERPatrón BUILDER

1 - Introducción1 - Introducción 2 - Características2 - Características 3 - Propósito3 - Propósito 4 – Diagrama4 – Diagrama 5 – Código de ejemplo5 – Código de ejemplo 6 – Problemas/Soluciones6 – Problemas/Soluciones

Page 3: SISTEMAS DE LA INFORMACIÓN Patrones de diseño. Patrón BUILDER  1 - Introducción  2 - Características  3 - Propósito  4 – Diagrama  5 – Código de

1 – Introducción1 – Introducción

A veces surge la necesidad de crear varios A veces surge la necesidad de crear varios tipos de objetos desde otro objeto (fuente)tipos de objetos desde otro objeto (fuente)

Dicho objeto fuente será quien, mediante Dicho objeto fuente será quien, mediante una serie de servicios, cree el resto de los una serie de servicios, cree el resto de los objetos en función de las necesidades del objetos en función de las necesidades del sistema.sistema.

Page 4: SISTEMAS DE LA INFORMACIÓN Patrones de diseño. Patrón BUILDER  1 - Introducción  2 - Características  3 - Propósito  4 – Diagrama  5 – Código de

2 - Características2 - Características

Es un patrón “creacional”Es un patrón “creacional” A menudo construye otro A menudo construye otro

patrón, el “Composite” patrón, el “Composite” (estructural)(estructural)

Simplifica la construcción Simplifica la construcción de objetos complejos de objetos complejos definiendo una clase cuya definiendo una clase cuya responsabilidad es crear responsabilidad es crear objetos de otras clasesobjetos de otras clases

BuilderBuilder ConcreteBuilderConcreteBuilder DirectorDirector ProductProduct

Son las clases que Son las clases que permiten el permiten el comportamiento del comportamiento del BuilderBuilder

Page 5: SISTEMAS DE LA INFORMACIÓN Patrones de diseño. Patrón BUILDER  1 - Introducción  2 - Características  3 - Propósito  4 – Diagrama  5 – Código de

3 - Propósito3 - Propósito

Se pretende con este patrón abstraer el Se pretende con este patrón abstraer el proceso de creación de un objeto proceso de creación de un objeto complejo, centralizando dicho proceso complejo, centralizando dicho proceso en un único punto, de tal forma que el en un único punto, de tal forma que el mismo proceso de construcción pueda mismo proceso de construcción pueda crear representaciones diferentes.crear representaciones diferentes.

Page 6: SISTEMAS DE LA INFORMACIÓN Patrones de diseño. Patrón BUILDER  1 - Introducción  2 - Características  3 - Propósito  4 – Diagrama  5 – Código de

4 - Diagrama4 - Diagrama

BuilderBuilder: Define una interfaz para la creación de : Define una interfaz para la creación de partes de un objetopartes de un objeto

Constructor

Page 7: SISTEMAS DE LA INFORMACIÓN Patrones de diseño. Patrón BUILDER  1 - Introducción  2 - Características  3 - Propósito  4 – Diagrama  5 – Código de

4 - Diagrama4 - Diagrama

ConcreteBuilder: Implementa la interfaz de ConcreteBuilder: Implementa la interfaz de BuilderBuilder, , mantiene referencia del producto creado y proporciona mantiene referencia del producto creado y proporciona una interfaz que retorna el producto. Ensambla las una interfaz que retorna el producto. Ensambla las piezas constituyentespiezas constituyentes

Genera el objeto concreto

Page 8: SISTEMAS DE LA INFORMACIÓN Patrones de diseño. Patrón BUILDER  1 - Introducción  2 - Características  3 - Propósito  4 – Diagrama  5 – Código de

4 - Diagrama4 - Diagrama

Director: Construye un objeto usando la Director: Construye un objeto usando la interfaz proporcionada por Builderinterfaz proporcionada por Builder

Quien dirige qué objeto se creará

Page 9: SISTEMAS DE LA INFORMACIÓN Patrones de diseño. Patrón BUILDER  1 - Introducción  2 - Características  3 - Propósito  4 – Diagrama  5 – Código de

4 - Diagrama4 - Diagrama

Product: Define las partes constituyentes del Product: Define las partes constituyentes del producto y representa un objeto complejo bajo producto y representa un objeto complejo bajo construcciónconstrucción

Clase de los objetos que se quieren construir

Page 10: SISTEMAS DE LA INFORMACIÓN Patrones de diseño. Patrón BUILDER  1 - Introducción  2 - Características  3 - Propósito  4 – Diagrama  5 – Código de

5 – Código de ejemplo5 – Código de ejemplo/** "Producto" */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;

}}}

/** "Abstract Builder" */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();

}

Page 11: SISTEMAS DE LA INFORMACIÓN Patrones de diseño. Patrón BUILDER  1 - Introducción  2 - Características  3 - Propósito  4 – Diagrama  5 – Código de

5 – Código de ejemplo5 – Código de ejemplo/** "ConcreteBuilder" */class HawaiPizzaBuilder extends PizzaBuilder{

public void buildMasa(){ pizza.setMasa("suave");}

public void buildSalsa(){pizza.setSalsa("dulce");

}

public void buildRelleno(){ pizza.setRelleno("chorizo + alcachofas");}

}

/** "ConcreteBuilder" */class PicantePizzaBuilder extends PizzaBuilder{

public void buildMasa(){pizza.setMasa("cocida");

}

public void buildSalsa(){pizza.setSalsa("picante");

}

public void buildRelleno() { pizza.setrelleno("pimienta+salchichón");}

}

Page 12: SISTEMAS DE LA INFORMACIÓN Patrones de diseño. Patrón BUILDER  1 - Introducción  2 - Características  3 - Propósito  4 – Diagrama  5 – Código de

5 – Código de ejemplo5 – Código de ejemplo/** "Director" */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();

}}

/** Un cliente pidiendo una pizza. */class BuilderExample{

public static void main(String[] args){Cocina cocina = new Cocina();PizzaBuilder hawai_pizzabuilder =

new HawaiPizzaBuilder();PizzaBuilder picante_pizzabuilder = new

PicantePizzaBuilder();cocina.setPizzaBuilder(hawai_pizzabuilder);cocina.construirPizza();Pizza pizza = cocina.getPizza();}

}

Page 13: SISTEMAS DE LA INFORMACIÓN Patrones de diseño. Patrón BUILDER  1 - Introducción  2 - Características  3 - Propósito  4 – Diagrama  5 – Código de

6 – Problemas/Soluciones6 – Problemas/Soluciones

A menudo la falta de experiencia puede llevarnos a utilizar A menudo la falta de experiencia puede llevarnos a utilizar un patrón en algún lugar donde habría sido mejor utilizar un patrón en algún lugar donde habría sido mejor utilizar otro patrón. Ejemplos típicos pueden ser utilizar un patrón otro patrón. Ejemplos típicos pueden ser utilizar un patrón Builder en lugar de un patrón Abstract Factory, o utilizar un Builder en lugar de un patrón Abstract Factory, o utilizar un patrón Chain of Responsability en lugar de aplicar una patrón Chain of Responsability en lugar de aplicar una cadena de Decorator, etc. cadena de Decorator, etc.

El uso de patrones incorrectos puede provocar serias El uso de patrones incorrectos puede provocar serias inconsistencias en nuestro modelo y la refactorización del inconsistencias en nuestro modelo y la refactorización del mismo pueden ser bastante compleja, debido mismo pueden ser bastante compleja, debido principalmente a que pueden haberse introducido principalmente a que pueden haberse introducido diferentes dependencias en cadena. diferentes dependencias en cadena.

Page 14: SISTEMAS DE LA INFORMACIÓN Patrones de diseño. Patrón BUILDER  1 - Introducción  2 - Características  3 - Propósito  4 – Diagrama  5 – Código de

6 – Problemas/Soluciones6 – Problemas/Soluciones

Para no realizar la elección equivocada siempre es Para no realizar la elección equivocada siempre es conveniente analizar las soluciones que se han tomado conveniente analizar las soluciones que se han tomado previamente a problemas similares al que estamos previamente a problemas similares al que estamos abordando. Con esta medida evitamos caer en abordando. Con esta medida evitamos caer en equivocaciones, siempre y cuando nos basemos en equivocaciones, siempre y cuando nos basemos en sistemas que han resultado exitosos. sistemas que han resultado exitosos.

Otra medida muy importante es la de dejarnos aconsejar Otra medida muy importante es la de dejarnos aconsejar por un mentor adecuado. Si no disponemos del por un mentor adecuado. Si no disponemos del conocimiento suficiente, no es una mala idea exponerle el conocimiento suficiente, no es una mala idea exponerle el problema a un experto o a una consultoría especializada problema a un experto o a una consultoría especializada en patrones de diseño. Además de obtener una solución en patrones de diseño. Además de obtener una solución avalada por dichos expertos seguramente podamos avalada por dichos expertos seguramente podamos aprender muchos conocimientos y buenas prácticas de aprender muchos conocimientos y buenas prácticas de estas personas. estas personas.