lunes, 8 de julio de 2013

Abstract Factory

Fábrica Abstracta (Abstract Factor y )

Una de las operaciones más comunes al programar con objetos es, lógicamente, la creación de los objetos. Sin embargo, esta operación es en sí misma un foco de acoplamiento. Cuando desde un fragmento de código C invocamos la creación de unobjeto de la clase A estamos acoplando ese código con el de la clase A. Si posteriormente deseamos cambiar el objeto declase A por otro de otra clase que cumpla su misma interfaz no podremos hacerlo sin cambiar el código C.
Para evitar este problema se suele delegar la creación de los objetos a otro objeto que se denomina fábrica (factory). De esta manera desde el código C no creamos el objeto A directamente, sino que se lo pedimos a la clase fábrica. Evidentemente,para evitar el acoplamiento de la fábrica con el código C, la propia fábrica deberá obtenerse por parámetros.
Además, el patrón Fábrica permite ocultar los constructores de las clases que crea, de manera que solo se puedan crear los objetos a través de la fábrica, impidiendo de esta forma su creación de una forma no prevista.
Existen otros Patrones de Diseño para la creación de objetos. En particular se puede destacar al patrón Constructor (Builder ) y al patrón Método de Construcción (Factor y Method ). El patrón Constructor es similar al patrón
Fábrica Abstracta salvo en que una Fábrica suele crear colecciones de objetos, mientras que un constructor solo crea un tipo de objetos. Por otro lado, el patrón Método de Construcción se diferencia del patrón Fábrica en que son los propios objetos derivados los que crean, mediante un método de construcción, los objetos concretos que se necesitan en cada momento.

Otra alternativa al uso del patrón Fabrica Abstracta consiste en el uso de inyectores de dependencias. Son objetos que se programan o se configuran para que devuelvan familias concretas de productos cuando cualquier clase de la aplicación le solicita cierto tipo de producto. Estas técnicas se apoyan en las características de introspección de Java y pueden ser complementarias al uso de Fábricas Abstractas.

No hay comentarios:

Publicar un comentario