Páginas

viernes, 29 de noviembre de 2013

Patrón Builder. Ejemplo: Creando Coches de Marca


Patrón Builder

Ejemplo: Creando Coches de Marca





Este patrón permite la creación de un objeto complejo, a partir de una variedad de partes que contribuyen individualmente a la creación y ensamblaje del objeto mencionado.
Centraliza el proceso de creación en un único punto, de tal forma que el mismo proceso de construcción pueda crear representaciones diferentes. (ver fuentes)

Se utiliza:
-Independizar el algoritmo de creación de un objeto complejo de las partes que constituyen el objeto y cómo se ensamblan entre ellas.
- Que el proceso de construcción permita distintas representaciones para el objeto construido, de manera dinámica.
- Este patrón debe utilizarse cuando el algoritmo para crear un objeto suele ser complejo e implica la interacción de otras partes independientes y una coordinación entre ellas para formar el ensamblaje.

Esquema:
Parte que lo forman:

  • Producto: representa el objeto complejo a construir.
  • Builder: especifica una interface abstracta para la creación de las partes del Producto. Declara las operaciones necesarias para crear las partes de un objeto concreto.
  • ConcreteBuilder: implementa Builder y ensambla las partes que constituyen el objeto complejo.
  • Director: construye un objeto usando la interfaz Builder. Sólo debería ser necesario especificar su tipo y así poder reutilizar el mismo proceso para distintos tipos.


El Cliente crea el objeto Director y lo configura con el objeto Builder deseado.
El Director notifica al constructor cuándo una parte del Producto se debe construir.
El Builder maneja los requerimientos desde el Director y agrega partes al producto.
El Cliente recupera el Producto desde el constructor.

 Consecuencias

  • Permite variar la representación interna de un producto.
  • El Builder ofrece una interfaz al Director para construir un producto y encapsula la representación interna del producto y cómo se juntan sus partes.
  • Si se cambia la representación interna basta con crear otro Builder que respete la interfaz.
  • Separa el código de construcción del de representación.
  • Las clases que definen la representación interna del producto no aparecen en la interfaz del Builder.
  • Cada ConcreteBuilder contiene el código para crear y juntar una clase específica de producto.
  • Distintos Directores pueden usar un mismo ConcreteBuilder.
  • Da mayor control en el proceso de construcción.
  • Permite que el Director controle la construcción de un producto paso a paso.
  • Sólo cuando el producto está acabado lo recupera el director del builder.


Ejemplo: (basado en el ejemplo de:  
Crear un objeto Auto, este sería nuestro producto. El auto se compondrá de varios atributos que lo componen: motor, marca, modelo y cantidad de puertas.
Esquema del proyecto:


Clase Auto:
->

Clase Motor:
->

Clase AutoBuilder:
El Builder (AutoBuilder) define al menos dos cosas: un método para devolver el Producto (el auto en nuestro caso) y los métodos necesarios para la construcción del mismo.
->

Clase FiatBuilder
->

Clase FordBuilder
->

Clase AutoDirector:
Lo primero que debe hacerse con esta clase es enviarle el tipo de auto que se busca construir (Ford, Fiat, etc). Luego, al llamar al método constructAuto(), la construcción se realizará de manera automática.
->


Programa principal:
->



Aplicación ejecutándose:



Enlace de descarga del ejemplo: enlace


Fuentes:
http://migranitodejava.blogspot.com.es/search/label/Builder
http://informaticapc.com/patrones-de-diseno/builder.php
http://sourcemaking.com/design_patterns/builder