Você está na página 1de 18

Ampliacin de Programacin Orientada a Objetos

Patronesdediseo

Fbrica Abstracta (Abstract Factory)


TambinconocidocomoKit

Juan Manuel Borges Cao

Organizacin

Propsito: De Creacin

Tiene que ver con el proceso de creacin. Delega alguna parte del proceso de creacin de objetos en otro objeto

mbito: Objeto

Se aplica principalmente a objetos. Tratan con las relaciones entre objetos, que pueden cambiarse en tiempo de ejecucin y son muy dinmicas.

Relacin entre los patrones de diseo

Prototipo: configurar fbricas dinmicamente Singleton: instancia nica Factory method: implementado usando

Una fbrica concreta suele ser un Singleton.

Propsito

Proporciona una interfaz para crear familias de objetos relacionados o que dependen entre s, sin especificar sus clases concretas.

Abstrae la implementacin de las clases fbricas de familias de objetos.

Motivacin

Ejemplo: Fbrica de Laberintos

Desarrollar un toolkit de creacin de laberintos que admita mltiples interfaces grficas de visualizacin.

Ejemplo

Fbrica Abstracta:
Declara una interfaz para crear cada tipo bsico de laberinto.

FbricadeLaberintos

Ejemplo

Fbrica Concreta:
Implementa las operaciones para crear objetos producto concretos.

FbricadeLaberintos2D FbricadeLaberintos3D

Ejemplo

Producto Abstracto:

Declara una interfaz para un tipo de objeto producto.


Ventana Laberinto Habitacin Pared ParedPuerta Jugador

Ejemplo

Producto Concreto:

Define un objeto producto que sea creado por la fbrica correspondiente. Implementa la interfaz Producto Abstracto

Ventana2D, Laberinto2D, Habitacin2D, Pared2D, ParedPuerta2D, Jugador2D Ventana3D, Laberinto3D, Habitacin3D, Pared3D, ParedPuerta3D, Jugador3D

Ejemplo

Cliente:
Slo usa interfaces declaradas por las clases Fbrica Abstracta y Producto Abstracto

FbricaDeLaberintos Ventana, Laberinto, Habitacin, Pared, ParedPuerta, Jugador

Ejemplo

Esquema de las clases:

Ejemplo
Ventana ventana = fbrica.ConstruirVentana(); Jugador jugador = fbrica.ConstruirJugador(); Laberinto laberinto = fbrica.ConstruirLaberinto(); Habitacion habitacin = fbrica.ConstruirHabitacin(parmetros); habitacin.EstablecerLado(Norte, fbrica.ConstruirPared()); habitacin.EstablecerLado(Sur, fbrica.ConstruirPared()); habitacin.EstablecerLado(Este, fbrica.ConstruirParedPuerta()); habitacin.EstablecerLado(Oeste, fbrica.ConstruirPared()); laberinto.AadirHabitacin(habitacin); laberinto.Start(Ventana, jugador); No usa cdigo de una implementacin o fbrica particular. El mismo cdigo funcionar con diferentes tipos de fbricas.

FbricaDeLaberintos2D

FbricaDeLaberintos3D

Aplicabilidad

Un sistema que debe ser independiente de cmo se crean, componen y representan sus productos. Un sistema que debe ser configurado con una familia de productos de entre varias.

Aplicabilidad

Una familia de objetos producto relacionados est diseada para ser usada conjuntamente, y esta restriccin es necesaria. Proporcionar una biblioteca de clases de productos, y solo revelar sus interfaces, no sus implementaciones

Colaboraciones

Normalmente slo se crea una nica instancia de una FbricaConcreta en tiempo de ejecucin, que crea objetos que tienen una determinada implementacin. FbricaAbstracta delega la creacin de objetos producto en su subclase FbricaConcreta.

Consecuencias

Asla las clases concretas Facilita el intercambio de familias de productos. Promueve la consistencia entre productos. Es difcil dar cabida a nuevos tipos de productos.

Você também pode gostar