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.
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:
Publicar un comentario