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.

- 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.
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.

- 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
- 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
- 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