Publicado el 30 de Abril del 2018
18.565 visualizaciones desde el 30 de Abril del 2018
223,6 KB
6 paginas
Creado hace 13a (03/02/2012)
38
Patrones de diseño para C#
Los 23 modelos de diseño
El objeto Catálogo puede utilizar estas subclases concretas para instanciar
los productos. No obstante si fuera necesario incluir nuevas clases de familias
de vehículos (diésel o mixto gasolina-eléctrico), las modificaciones a realizar
en el objeto Catálogo pueden ser bastante pesadas.
El patrón Abstract Factory resuelve este problema introduciendo una
interfaz FábricaVehículo que contiene la firma de los métodos para defi-
nir cada producto. El tipo devuelto por estos métodos está constituido por una
de las clases abstractas del producto. De este modo el objeto Catálogo no
necesita conocer las subclases concretas y permanece desacoplado de las fami-
lias de producto.
Se incluye una subclase de implementación de FábricaVehículo por cada
familia de producto, a saber las subclases FábricaVehículoElectrici-
dad y FábricaVehículoGasolina. Dicha subclase implementa las opera-
ciones de creación del vehículo apropiado para la familia a la que está asociada.
El objeto Catálogo recibe como parámetro una instancia que responde a la
interfaz FábricaVehículo, es decir o bien una instancia de Fábrica-
VehículoElectricidad, o bien una instancia de FábricaVehículo-
Gasolina. Con dicha instancia, el catálogo puede crear y manipular los
vehículos sin tener que conocer las familias de vehículo y las clases concretas
de instanciación correspondientes.
d
e
v
r
e
s
e
r
s
t
h
g
i
r
l
l
A
-
I
N
E
s
n
o
i
t
i
d
E
©
El patrón Abstract Factory
Capítulo 4
39
El conjunto de clases del patrón Abstract Factory para este ejemplo se
detalla en la figura 4.1.
Figura 4.1 - El patrón Abstract Factory aplicado a las familias de vehículos
40
3. Estructura
Patrones de diseño para C#
Los 23 modelos de diseño
3.1 Diagrama de clases
La figura 4.2 detalla la estructura genérica del patrón.
Figura 4.2 - Estructura del patrón Abstract Factory
d
e
v
r
e
s
e
r
s
t
h
g
i
r
l
l
A
-
I
N
E
s
n
o
i
t
i
d
E
©
El patrón Abstract Factory
Capítulo 4
3.2 Participantes
41
Los participantes del patrón son los siguientes:
– FábricaAbstracta (FábricaVehículo) es una interfaz que define las
firmas de los métodos que crean los distintos productos;
– FábricaConcreta1, FábricaConcreta2
(FábricaVehículoE-
lectricidad, FábricaVehículoGasolina) son las clases concretas
que implementan los métodos que crean los productos para cada familia de
producto. Conociendo la familia y el producto, son capaces de crear una ins-
tancia del producto para esta familia;
– ProductoAbstractoA y ProductoAbstractoB
(Scooter y
Automóvil) son las clases abstractas de los productos independientemente
de su familia. Las familias se introducen en las subclases concretas;
– Cliente es la clase que utiliza la interfaz de FábricaAbstracta.
3.3 Colaboraciones
La clase Cliente utiliza una instancia de una de las fábricas concretas para
crear sus productos a partir de la interfaz FábricaAbstracta.
Observación
Normalmente sólo es necesario crear una instancia de cada fábrica concre-
ta, que puede compartirse por varios clientes.
4. Dominios de uso
El patrón se utiliza en los dominios siguientes:
– Un sistema que utiliza productos necesita ser independiente de la forma en
que se crean y agrupan estos productos;
– Un sistema está configurado según varias familias de productos que pueden
evolucionar.
42
Patrones de diseño para C#
Los 23 modelos de diseño
5. Ejemplo en C#
Presentamos a continuación un pequeño ejemplo de uso del patrón escrito en
C#. El código C# correspondiente a la clase abstracta Automovil y sus sub-
clases aparece a continuación. Es muy sencillo, describe los cuatro atributos de
los automóviles así como el método mostrarCaracteristicas que per-
mite visualizarlas.
using System;
public abstract class Automovil
{
protected string modelo;
protected string color;
protected int potencia;
protected double espacio;
public Automovil(string modelo, string color, int
potencia, double espacio)
{
this.modelo = modelo;
this.color = color;
this.potencia = potencia;
this.espacio = espacio;
}
public abstract void mostrarCaracteristicas();
}
using System;
public class AutomovilElectricidad : Automovil
{
public AutomovilElectricidad(string modelo, string
color, int potencia, double espacio) : base(modelo,
color, potencia, espacio){}
public override void mostrarCaracteristicas()
{
Console.WriteLine(
"Automóvil eléctrico de modelo: " + modelo +
" de color: " + color + " de potencia: " +
d
e
v
r
e
s
e
r
s
t
h
g
i
r
l
l
A
-
I
N
E
s
n
o
i
t
i
d
E
©
El patrón Abstract Factory
Capítulo 4
potencia + " de espacio: " + espacio);
}
}
43
using System;
public class AutomovilGasolina : Automovil
{
public AutomovilGasolina(string modelo, string
color, int potencia, double espacio) : base(modelo,
color, potencia, espacio){}
public override void mostrarCaracteristicas()
{
Console.WriteLine(
"Automóvil de gasolina de modelo: " + modelo +
" de color: " + color + " de potencia: " +
potencia + " de espacio: " + espacio);
}
}
El código C# correspondiente a la clase abstracta Scooter y sus subclases
aparece a continuación. Es similar al de los automóviles, salvo por el atributo
espacio que no existe para las scooters.
using System;
public abstract class Scooter
{
protected string modelo;
protected string color;
protected int potencia;
public Scooter(string modelo, string color, int
potencia)
{
this.modelo = modelo;
this.color = color;
this.potencia = potencia;
}
public abstract void mostrarCaracteristicas();
}
Comentarios de: Patrones de diseño para C# (0)
No hay comentarios