Fábrica abstracta
Propósito
El propósito de este patrón de diseño es crear familias de objetos relacionados (normalmente por herencia), sin que sepamos sus clases concretas.
Diagrama de clases
A continuación tenemos un diagrama UML con el patrón de diseño Fábrica abstracta:
[uml]
Class.FabricaAbstracta (”FabricaAbstracta”) () (”+CrearProductoA ()”, “+CrearProductoB ()”);
classStereotypes.FabricaAbstracta (”<>”);
Class.FabricaConcretaX (”FabricaConcretaX”) () (”+CrearProductoA ()”, “+CrearProductoB ()”);
Class.FabricaConcretaY (”FabricaConcretaY”) () (”+CrearProductoA ()”, “+CrearProductoB ()”);
Class.ProductoAbstractoA (”ProductoAbstractoA”) () ();
classStereotypes.ProductoAbstractoA (”<>”);
Class.ProductoAX (”ProductoAX”) () ();
Class.ProductoAY (”ProductoAY”) () ();
Class.ProductoAbstractoB (”ProductoAbstractoB”) () ();
classStereotypes.ProductoAbstractoB (”<>”);
Class.ProductoBX (”ProductoBX”) () ();
Class.ProductoBY (”ProductoBY”) () ();
Class.Cliente (”Cliente”) () ();
FabricaConcretaX.n = FabricaAbstracta.s - (50, 30);
FabricaConcretaY.n = FabricaAbstracta.s - (-50, 30);
ProductoAbstractoA.w = FabricaAbstracta.e - (-140, -60);
ProductoAX.n = ProductoAbstractoA.s - (-35, 30);
ProductoAY.n = ProductoAbstractoA.s - (35, 30);
ProductoAbstractoB.w = FabricaAbstracta.e - (-100, 40);
ProductoBX.n = ProductoAbstractoB.s - (-35, 30);
ProductoBY.n = ProductoAbstractoB.s - (35, 30);
Cliente.s = FabricaAbstracta.n - (0, -20);
drawObjects (FabricaAbstracta, FabricaConcretaX, FabricaConcretaY, ProductoAbstractoA, ProductoAX, ProductoAY, ProductoAbstractoB, ProductoBX, ProductoBY, Cliente);
link (inheritance) (pathStepY (FabricaConcretaX.n, FabricaAbstracta.s, 10));
link (inheritance) (pathStepY (FabricaConcretaY.n, FabricaAbstracta.s, 10));
link (inheritance) (pathStepY (ProductoAX.n, ProductoAbstractoA.s, 10));
link (inheritance) (pathStepY (ProductoAY.n, ProductoAbstractoA.s, 10));
link (inheritance) (pathStepY (ProductoBX.n, ProductoAbstractoB.s, 10));
link (inheritance) (pathStepY (ProductoBY.n, ProductoAbstractoB.s, 10));
link (dependency) (pathStepX (FabricaConcretaY.e, ProductoAY.w, 10));
link (dependency) (pathStepX (FabricaConcretaY.e, ProductoBY.w, 10));
link (dependency) (pathStepY (FabricaConcretaX.s, ProductoAX.s, -40));
link (dependency) (pathStepY (FabricaConcretaX.s, ProductoBX.s, -40));
clink (associationUni) (Cliente, FabricaAbstracta);
link (associationUni) (pathStepX (Cliente.e, ProductoAbstractoA.w, 60));
link (associationUni) (pathStepX (Cliente.e, ProductoAbstractoB.w, 60));
[/uml]
Spanish
English