domingo, 13 de julio de 2008

FACTORY PATTERN

Este pattern se utiliza para la creación de objetos , nos permite la creación de clases sin especificar la clase exacta del objeto a ser creado. Este pattern define una interfase para crear un objeto, pero las subclases son las que deciden que clase instanciar.

Ejemplo :


public abstract class Empleado
{
// Este metodo va a ser implementado en las clases
// que van a heredar de Empleado
public abstract int Sueldo();

public enum TipoEmpleado
{
Programador,
Funcional,
Analista
}

// Aca implementamos Factory , este va a devolver Empleados
// que se generan segun el parametro recibido.
// El resultado siempre sera el mismo (Empleado) , varia la
// forma en como se genera la clase.
public static Empleado EmpleadoFactory(TipoEmpleado tipo)
{
// Segun el tipo recibido generamos el objeto Empleado
// de una clase en particular
switch (tipo)
{
case TipoEmpleado.Programador:
return new Programador();
case TipoEmpleado.Funcional:
return new Funcional();
case TipoEmpleado.Analista:
return new Analista();
}
throw new Exception("Tipo no Valido");

}

}


public class Programador : Empleado
{
public override int Sueldo()
{
return 15;
}
}

public class Funcional : Empleado
{
public override int Sueldo()
{
return 20;
}
}

public class Analista : Empleado
{
public override int Sueldo()
{
return 30;
}
}


Codigo Cliente :

static void Main(string[] args)
{
// De la Factory Empleado hacemos que nos devuelva
// un Empleado del tipo programador
Empleado programador = Empleado.EmpleadoFactory(Empleado.TipoEmpleado.Programador);

Console.WriteLine("Sueldo Programador :" + programador.Sueldo().ToString());


// De la Factory Empleado hacemos que nos devuelva
// un Empleado del tipo funcional
Empleado funcional = Empleado.EmpleadoFactory(Empleado.TipoEmpleado.Funcional);

Console.WriteLine("Sueldo Funcional :" + funcional.Sueldo().ToString());


Console.ReadLine();
}

No hay comentarios: