Mostrando las entradas con la etiqueta design. Mostrar todas las entradas
Mostrando las entradas con la etiqueta design. Mostrar todas las entradas

domingo, 9 de marzo de 2014

Patrones de Diseño - Builder

Builder

Objetivo, Separa la construcción de un objeto complejo de su representación de modo que el mismo proceso de construcción puede crear diferentes representaciones.

Motivo:

Un lector para el formato de intercambio de documentos RTF (Rich Text Format) debería ser capaz de convertir RTF a muchos formato de texto. El lector puede convertir documentos RTF en texto plano ASCII o en un Widget de texto que pueden ser editados interactivamente. El problema, sin embargo, es que el número de conversiones posible es abierto. Por lo tanto, debe ser fácil de añadir una nueva conversión sin modificar el lector.

Aplicabilidad

Usar el patrón Builder cuando:

  • El algoritmo para crear un objeto complejo deber ser independiente de las partes que conforman el objeto y como están ensambladas.
  • El proceso de construcción debe permitir diferentes representaciones para el objeto que es construido.
Participantes

Builder,
- especifica una interfaz abstracta para crear partes de un objeto Product.
ConcreteBuilder
- construye y ensambla partes del productopara implementar la interfaz Builder.
- define y mantiene un seguimiento de la representación que crea.
- provee una interfaz para obtener el producto
Director
- construye un objeto usando la interfaz del Builder.
Product
- representa el objeto complejo en construcción. El ConcreteBuilder construye la representación interna del producto y define el procesos por el cual este es ensamblado.
- incluye clases que definen las partes constituyentes, inclyendo interfaces para ensamblar las partes en el resultado final.

Ejemplos de Código [0] [1]

La diferencia entre el Builder y el Abstract Factory
La principal diferencia es que el Builder se enfoca en construir un objeto complejo paso a paso. El Abstract Factory hace incapié en la familia de objetos producto (ya sea sencilla o compleja). El Builder retorna el producto como un paso final, pero en cuanto al Abstract Factory el producto es retornado inmediatamente.


[0] http://es.wikipedia.org/wiki/Builder_(patr%C3%B3n_de_dise%C3%B1o)
[1] http://tratandodeentenderlo.blogspot.com.ar/2010/02/patrones-de-diseno-builder.html

sábado, 8 de marzo de 2014

Patrones de Diseño Creacionales - Abstract Factory

Los patrones de diseño creacionales son aquellos que abstraen el proceso de instanciación. Ellos ayudan a hacer un sistema independiente de como sus objetos son creados, compuestos, y representados. Una patrón creacional de clase usa herencia para variar la clase que es instanciada, mientras un patron creacional de objeto delegará la instanciación a otro objeto.

Los patrones creacionales se vuelven importantes en sistemas que pasan a depender más de la composición de objetos que de la herencia de clases. Como eso sucede, el enfasis cambia de modificar dificilmente un conjunto fijo de comportamientos hacia definir un conjunto pequeño de comportamientos fundamentales que pueden ser compuestos dentro de cualquier numero de los más complejos. Creando así objetos con un comportamiento particular que requiere más que simplemente instanciar una clase.

Abstract Factory

Intenta:
proveer una interfaz para la creación de familias objetos relacionados o dependientes sin especificar sus clases concretas.

Aplicación:

  • Un sistema debería ser independiente de como sus productos son creados, compuestos, y representados.
  • Un sistema debería ser configurado con una de múltiples familias de productos.
  • Una familia de objetos producto relacionados es diseñada para ser usados juntos y necestás hacer cumplir esta restricción.
  • Buscás proveer una biblioteca de clases de productos, y buscas revelar solo sus interfaces, no su implementación.
Participantes:
  • Abstract Factory - declara una interfaz para operaciones que crean objetos producto abstractos.
  • ConcreteFactory - implementa las operaciones para crear objetos producto concretos.
  • AbstractProduct - declara una interfaz para un tipo de objeto producto.
  • ConcreteProduct - define un producto objeto para ser creado por el correspondiente Concrete Factory. - implementa la interfaz del AbstractProduct.
  • Client - usa solo las interfaces declaradas por las clases AbstractFactory y AbstractProduct
Ejemplos de Abstract Factory en Python
[0][1][2]

[0] http://python-3-patterns-idioms-test.readthedocs.org/en/latest/Factory.html#abstract-factories
[1] http://ginstrom.com/scribbles/2007/10/08/design-patterns-python-style/
[2] http://jpython.blogspot.com.ar/2012/09/python-design-pattern-abstract-factory.html