Patrones de diseño - Método de Fabricación

El patrón Método de Fabricación se encuentra dentro de los patrones creacionales ya que proporciona una forma de crear objetos, concretamente define un interfaz, pero permite al cliente decidir que clase instanciar y referenciamos al objeto creado usando esta interfaz común.

Necesidad

Crear nuevos objetos entre un conjunto de objetos diferentes que comparten una interfaz común y que serán empleados por un cliente. El cliente puede elegir el tipo de objeto que necesita crear y la fábrica le devolverá instancias de una clase en particular por medio de un identificador. Esto nos permite también añadir nuevos objetos al grupo y poder usarlos desde el cliente sin tener que cambiar su código. 

Implementación

Crearemos una fábrica de objetos para crear diferentes modelos de coche que llamaremos FabricaCoches.

Los diferentes modelos de coche serán: TodoterrenoUtilitarioDeportivo que heredarán de una interface IModeloCoche.

Cuando el cliente quiere fabricar un modelo de coche utiliza la FabricaCoches indicándole un identificador y esta le devuelve una instancia de una clase con un modelo particular de coche. Veamos la representación de nuestro patrón fábrica de coches:

Patrón Fábrica

Código en Vala

Lo primero creamos la interfaz que implementarán las diferentes clases de coche:

IModeloCoche.vala
// Interfaz para los modelos de coche 
public interface IModeloCoche : GLib.Object 
{ 
    public abstract void crear (); 
} 

Ahora creamos los diferentes modelos de coche implementando la interfaz:

TodoTerreno.vala
public class TodoTerreno : GLib.Object, IModeloCoche  
{ 
    public void crear () { 
        print ("Creado TodoTerreno\n"); 
    } 
} 

Deportivo.vala
public class Deportivo : GLib.Object, IModeloCoche 
{ 
    public void crear () { 
        print ("Creando Deportivo\n"); 
    } 
} 

Utilitario.vala
public class Utilitario : GLib.Object, IModeloCoche 
{ 
    public void crear () { 
        print ("Creando Utilitario\n"); 
    } 
} 

Ahora creamos nuestra fábrica de coches implementando el patrón Fábrica que permite crear cualquiera de los modelos de coche:

FabricaCoches.vala
// Clase FabricaCoches implementando el patrón Fábrica 
public class FabricaCoches : GLib.Object 
{ 
    public IModeloCoche getModeloCoche(string modeloTipo) { 
 
        if (modeloTipo == "TTR") { 
            return new TodoTerreno();  
        } else if (modeloTipo == "DEPOR") { 
            return new Deportivo(); 
        } 
        else // Por defecto creamos un utilitario 
            return new Utilitario(); 
    } 
} 

Por último hacemos uso de nuestra fábrica de coches creando un modelo de cada tipo:

UsoPatronFabrica.vala
public class UsoPatronFactory : GLib.Object 
{ 
    public static int main (string[] args) 
    { 
        FabricaCoches fabricaCoches = new FabricaCoches (); 
         
        IModeloCoche ttr = fabricaCoches.getModeloCoche("TTR"); 
        ttr.crear (); 
         
        IModeloCoche depor = fabricaCoches.getModeloCoche("DEPOR"); 
        depor.crear (); 
         
        IModeloCoche util = fabricaCoches.getModeloCoche("UTIL"); 
        util.crear (); 
         
        return 0; 
    } 
} 

Construimos y ejecutamos el programa:

❯ valac Deportivo.vala TodoTerreno.vala Utilitario.vala IModeloCoche.vala FabricaCoches.vala UsoPatronFactory.vala -o UsoPatronFactory
❯ ./UsoPatronFactory
Creado TodoTerreno
Creando Deportivo
Creando Utilitario

 

Indice de Patrones

 

Modificado por última vez enJueves, 22 Octubre 2020 20:15
(2 votos)
Etiquetado como :

Deja un comentario

Asegúrese de introducir toda la información requerida, indicada por un asterisco (*). No se permite código HTML.