Académique Documents
Professionnel Documents
Culture Documents
Grabador
Grabador
CD
Cinta magntica
Reproductor
Reproductor
Fig. x.1
Si estos productos ofrecieran a sus usuarios la misma interfaz, un cliente podra realizar el mismo proceso de prueba de productos en cualquiera de las familias. Por ejemplo, podra registrar una cancin utilizando el dispositivo de grabacin, para luego escucharlo en el dispositivo de reproduccin. Slo deberamos asegurarnos que los productos sean compatibles entre si, esto es, que todos ellos pertenezcan a una misma
familia.
El problema consiste en la definicin de un mecanismo que permita al cliente crear y
utilizar familias completas de productos, sin tener conocimiento de cules son los integrantes concretos de la familia.
Descripcin de la solucin ofrecida por el patrn de diseo
La definicin de interfaces constituye el mecanismo mediante el cual es posible ocultar
la implementacin de una clase en aquellas porciones de cdigo en que son utilizadas.
En consecuencia, la definicin de interfaces comunes para aquellos productos anlogos pertenecientes a diferentes familias, permitir a un mismo cliente realizar operaciones similares sobre artefactos de tecnologas distintas. El problema surge cuando el
cliente debe manejar familias cuyos productos no deben entremezclarse. Por ejemplo,
<<stereotipe>>
Client
<<stereotipe>>
<<stereotipe>>
AbstractFactory
AbstractProduct
{abstract}
{abstract}
<<stereotipe>>
ConcreteFactory
<<stereotipe>>
<<instantiates>>
produces
ConcreteProduct
#ConcreteProduct()
+createProduct() : AbstractProduct
Fig. x.2
<<Interface>>
DevicesFactory
Client
+ createPlayer() : Player
+ createRecorder() : Recorder
+ createMedia() : Media
<<Interface>>
Media
CD Devices
Fact ory
Tape Devices
Factory
Tape
CD
+ saveOnTape(String sound)
+ readTape() : String
+ writeOnDisk(String sound)
+ readDisk() : String
<<Interface>>
Recorder
+ accept(Media)
+ record()
Tape Recorder
CD Recorder
<<Interface>>
Player
+ ac cept(Media)
+ play()
Tape Player
CD Player
Fig. x.3
Participantes
ConcreteFactory
(Fbrica
CDDevicesFactory.
classes
TapeDevicesFactory
concreta):
Cada una de estas clases Implementa la interfaz de la AbstractFactory (DevicesFactory), especificando las operaciones que crean y retornan objetos correspondientes a productos especficos (ConcreteProduct).
Declara una interfaz para las operaciones que crean y restituyen productos.
En la declaracin de cada mtodo, los productos restituidos son del tipo
AbstractProduct.
Los productos de las distintas familias implementan las interfaces definidas anteriormente. En el caso de la familia de productos basada en el casete, los productos son
Tape, TapeRecorder y TapePlayer:
La interfaz DevicesFactory declara los mtodos que utilizar el cliente para interactuar con las fabricas de productos. Ntese que cada mtodo tiene la funcin de crear
un tipo de producto especfico:
public interface DevicesFactory {
Las clases TapeDevicesFactory y CDDevicesFactory corresponden a las fbricas de productos de las diferentes familias. Estas clases corresponden a las ConcreteFactory para la creacin de productos correspondientes a las familias basadas en casete en CD, respectivamente.
public class TapeDevicesFactory implements DevicesFactory {
public Player createPlayer() {
return new TapePlayer();
}
public Recorder createRecorder() {
return new TapeRecorder();
}
public Media createMedia() {
return new Tape();
}
}
public class CDDevicesFactory implements DevicesFactory {
public Player createPlayer() {
return new CDPlayer();
}
public Recorder createRecorder() {
return new CDRecorder();
}
public Media createMedia() {
return new CD();
}
}
player.accept( media );
player.play();
}
}
CD devices
the song : Fly me to the moon...
the record:
the moon...