Abstract factory. presentación

14
Alejandro Vidal Arcas Ampliación de Programación Orientada a Objetos Curso 2010-2011

Transcript of Abstract factory. presentación

Page 1: Abstract factory. presentación

Alejandro Vidal Arcas

Ampliación de Programación Orientada a Objetos

Curso 2010-2011

Page 2: Abstract factory. presentación

Propósito Proporciona una interfaz para crear familias de objetos

relacionados o que dependen entre sí, sin especificar sus clases concretas.

CREACIÓN DE OBJETOS

Page 3: Abstract factory. presentación

Motivación Pensemos un toolkit que admite múltiples estándares de

interfaz de usuario y es programado en una interfaz en particular, su portabilidad y su modificación se complica.

Solución:

Una clase abstracta que declara una interfaz para crear cada tipo de básico de widget.

Una clase abstracta para cada tipo de widget.

Las subclases concretas implementan widgets para un estándar concreto de interfaz de usuario.

Los usuarios llaman a esta clase abstracta sin ser conscientes que clase concreta se está usando, de esta manera se consigue una independencia entre cliente y interfaz de usuario.

Page 4: Abstract factory. presentación

Motivación

Page 5: Abstract factory. presentación

Aplicabilidad Un sistema debe ser independiente de cómo se crean,

componen y representan sus productos.

Un sistema debe ser configurado con una familia de productos de entre varias.

Una familia de objetos producto relacionados está diseñada para ser usada conjuntamente y es necesario hacer cumplir esta restricción

Quiere proporcionar una biblioteca de clases de productos y sólo quiere revelar sus interfaces no sus implementaciones.

Page 6: Abstract factory. presentación

Estructura

Page 7: Abstract factory. presentación

Participantes AbstactFactory: declara una interfaz para operaciones

que crean objetos, productos abstractos.

ConcreteFactory: implementa las operaciones para crear objetos, productos concretos.

AbstractProduct: declara una interfaz para un tipo de objeto producto.

Page 8: Abstract factory. presentación

Participantes Product: define un objeto producto para que sea creado

por la fábrica correspondiente. Implementa la interfaz AbstractProduct.

Cliente: sólo usa interfaces declaradas por las clases AbstractFactory y AbstractProduct.

Page 9: Abstract factory. presentación

Colaboraciones Normalmente sólo se crea una única instancia de una

clase ConcreteFactory en tiempo de ejecución. Esta fábrica concreta crea objetos producto que tienen una determinada implementación. Para crear diferentes objetos producto, los clientes deben usar una fábrica concreta diferente.

AbstractFactory delega la creación de objetos producto en su subclase ConcreteFactory.

Page 10: Abstract factory. presentación

Consecuencias Ventajas:

Aísla las clases concretas: ayuda a controlar los objetos que se creen y encapsula la responsabilidad y el proceso de creación de objetos producto.

Facilita el intercambio de familias de productos sin mezclarse, permitiendo configurar un sistema con una de entre varias familias de productos.

Fomenta la consistencia entre productos.

Page 11: Abstract factory. presentación

Consecuencias Desventajas:

Es difícil dar cabida a nuevos tipos de productos, esto se debe a que la interfaz AbstractFactory fija el conjunto de productos que se pueden crear. Permitir nuevos tipos de productos requiere ampliar la interfaz de la fábrica, cambiar la clase AbstractFactory y todas sus subclases.

Page 12: Abstract factory. presentación

Implementación Fábricas únicas: una instancia de una ConcreteFactory

por cada familia de productos, suele implementarse mejor como un Singleton.

Creación de productos: el modo más común para crear las subclases Product (producto concreto) es definiendo un método de fabricación para cada producto(Factory Method).

En caso de que sea posible tener muchas familias de productos, la fábrica concreta puede implementarse usando el patrón Prototype.

Definir fabricas extensibles: añadiendo un parámetro en

las operaciones de creación que indique el tipo de objeto a crear: mas flexible y menos seguro.

Page 13: Abstract factory. presentación

Usos conocidos

Los WidgetKit y DialogKit usan abstract factory para el manejo de interfaz de usuario.

ET++ usa el patrón Abstract Factory para lograr portabilidad entre varios sistemas de ventanas(por ejemplo, X Windows y Sun View).

Page 14: Abstract factory. presentación

Patrones relacionados