Patrones Creacionales

Prototype

Intención

Especificar el tipo de objetos a crear utilizando un prototipo de ejemplo, y crear nuevos objetos copiando este prototipo.

Aplicabilidad

Se debe usar este patrón cuando un sistema deba ser independiente de cómo se crean, se componen y se representan sus productos, y además:
  • Cuando las clases a instanciar sean especificadas en tiempo de ejecución.
  • Para evitar construir una jerarquía de clases de fábricas paralela a la jerarquía de clases de producto.
  • Cuando las instancias de una clase puedan tener uno de entre sólo unos pocos estados diferentes.
Estructura
Participantes
  • Prototype: declara una interface para la auto clonación.
  • ConcretePrototype: implementa una operación para clonarse a sí mismo.
  • Client: crea un nuevo objeto solicitándole al prototipo que se clone a sí mismo.
Consecuencias

Su uso es aconsejable cuando un sistema deba ser independiente de cómo se crean, componen y representan sus productos.
  • Algunas ventajas de aplicar este patrón son: Añadir y eliminar instancias (productos) en tiempo de ejecución.
  • Especificar nuevos objetos modificando valores.
  • Especificar nuevos objetos variando la estructura.
  • Reducir la herencia.
  • Configurar dinámicamente una aplicación con clases
  • Habrá tantos prototipos concretos como estados tenga el objeto a instanciar.

Builder

Intención

Separa la construcción de un objeto complejo de su representación para que el mismo proceso de construcción pueda dar lugar a diferentes representaciones.

Motivación

Facilita la construcción de un objeto con una composición de más objetos. Un caso habitual es el de construir una Interfaz de usuario.

Ejemplo: una aplicación que convierte texto RTF a diferentes formatos: texto ascii, TeX, TextWidget.

Aplicabilidad

Se usa cuando:
  • El algoritmo para crear un objeto complejo debe ser independiente de las partes que constituyen el objeto y su ensamblaje.
  • El proceso de construcción debe permitir representaciones diferentes del objeto construido.
Estructura

Colaboraciones
  • El cliente crea el objeto Director y lo configura con el constructor (builder deseado)
  • El director le notifica al constructor cada vez que se debe construir una parte del producto
  • El constructor procesa solicitudes del director y agrega partes al producto
  • El cliente obtiene el producto del constructor
Participantes
  • Builder especifica una interfaz abstracta para crear partes del objeto producto.
  • ConcreteBuilder Construye y ensambla partes del producto implementando la interface Builder. Define y lleva un registro de las representaciones que crea. Provee una interfaz para recuperar el producto.
  • Director construye un objeto usando la interfaz Builder
  • Product Representa el objeto complejo en construcción. ConcreteBuilder construye la representación interna del producto y define el proceso por el cual es ensamblado. Incluye clases que definen las partes constituyentes, incluyendo interfaces para ensamblar las partes en el producto final
Consecuencias
  • Permite variar la representación interna del producto
  • El objeto constructor provee al director con una interfaz para construir el producto.
  • Permite aíslar el código de construcción y representación
  • Cuando el proceso termina el producto es retribuido.
  • Da control refinado sobre el proceso de construcción. El patrón Builder construye el producto (objeto) paso a paso bajo el control del Director.

No hay comentarios:

Publicar un comentario