You are on page 1of 6

Ejemplo en Java

Presentamos a continuacin un pequeo ejemplo de uso del patrn escrito en


Java. El cdigo Java correspondiente a la clase abstracta Automovil y sus
subclases aparece a continuacin. Es muy sencillo, describe los cuatro atributos
de los automviles as como el mtodo mostrarCaracteristicas que permite
visualizarlas.
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();
}
public class AutomovilElectricidad extends Automovil
{
public AutomovilElectricidad(String modelo, String
color, int potencia, double espacio)
{
super(modelo, color, potencia, espacio);
}
public void mostrarCaracteristicas()
{
System.out.println(

"Automovil electrico de modelo: " + modelo +


11
de color: " + color + " de potencia: " +
potencia + " de espacio: 11 + espacio);
}
}
public class AutomovilGasolina extends Automovil
{
public AutomovilGasolina(String modelo, String
color, int potencia, double espacio)
{
super(modelo, color, potencia, espacio);
}
public void mostrarCaracteristicas()
{
System.out.println(
"Automovil de gasolina de modelo: " + modelo +
" de color: " + color + " de potencia: " +
potencia + " de espacio: " + espacio);
}
}
El cdigo Java correspondiente a la clase abstracta Scooter y sus subclases
aparece a continuacin. Es similar al de los automviles, salvo por el atributo
espacio que 110 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()
}
public class ScooterElectricidad extends Scooter
{
public ScooterElectricidad(String modelo, String color,
int potencia)
{
super(modelo, color, potencia);
}
public void mostrarCaracteristicas()
{
System.out.println("Scooter electrica de modelo: " +
modelo + " de color: " + color +

de potencia: " + potencia);


}
public class ScooterGasolina extends Scooter
{
public ScooterGasolina(String modelo, String color,
int potencia)
{
super(modelo, color, potencia);
}
public void mostrarCaracteristicas()
{
System.out.println("Scooter de gasolina de modelo: "
modelo + " de color: " + color +

de potencia: " + potencia);


}

}
Ahora podemos introducir la interfaz FabricaVehiculo y sus dos clases de
implementacin, una para cada familia (elctrico/gasolina). Es fcil darse cuenta
de que slo las clases de implementacin utilizan las clases concretas de los
vehculos.
public interface FabricaVehiculo
{
Automovil creaAutomovil(String modelo, String color,
int potencia, double espacio);
Scooter creaScooter(String modelo, String color, int
potencia);
}
public class FabricaVehiculoElectricidad implements
FabricaVehiculo
{
public Automovil creaAutomovil(String modelo, String
color, int potencia, double espacio)
{
return new AutomovilElectricidad(modelo, color,
potencia, espacio);
}
public Scooter creaScooter(String modelo, String
color, int potencia)
{
return new ScooterElectricidad(modelo, color,
potencia);
}
}
public class FabricaVehiculoGasolina implements
FabricaVehiculo
{

public Automovil creaAutomovil(String modelo, String


color, int potencia, double espacio)
{
return new AutomovilGasolina(modelo, color,
potencia, espacio);
}
public Scooter creaScooter(String modelo, String
color, int potencia)
{
return new ScooterGasolina(modelo, color, potencia)
}
}
Por ltimo, se presenta el cdigo fuente Java del cliente de la fbrica, a saber el
catlogo que es. en nuestro ejemplo, el programa principal. Por motivos de
simplicidad, el catlogo solicita al comienzo la fbrica que se quiere utilizar
(electricidad o gasolina). Esta fbrica debera proporcionarse como parmetro al
catlogo.
El resto del programa es totalmente independiente de la familia de objetos,
respetando el objetivo del patrn Abstract Factory.
import java.til.*;
public class Catalogo
{
public static int nAutos = 3;
public static int nScooters =2;
public static void main(String[] args)
{
Scanner reader = new Scanner(System.in);
FabricaVehiculo fabrica;
Automovil[] autos = new Automovil[nAutos];
Scooter!] scooters = new Scooter [nScooters];
System.out.print("Desea utilizar " +
"vehiculos elctricos (1) o a gasolina (2):");

String eleccin = reader.next();


if (eleccin.equals("1"))
{
fabrica = new FabricaVehiculoElectricidad();
}
else
{
fabrica = new FabricaVehiculoGasolina();
}
for (int index = 0; index < nAutos; index++)
autos[index] = fabrica.creaAutomovil("estandar
"amarillo", 6+index, 3.2);
for (int index = 0; index < nScooters; index++)
scooters[index] = fabrica.creaScooter("clasico
"rojo", 2+index);
for (Automovil auto: autos)
auto.mostrarCaracteristicas();
for (Scooter scooter: scooters)
scooter.mostrarCaracteristicas();
}
}

You might also like