Muy buena noche.
El día de hoy vamos a explicar o al menos tratar de explicar
la función del patrón de estrategia.
Recordando a dos grandes pilares del paradigma orientado a
objetos. El patrón de estrategia usa como base a la herencia y al polimorfismo.
Usando nuevamente el ejemplo de drogadictos, vamos a
comenzar a diseñar nuestra clase protagonista.
Drogadicto.
Esta clase pertenece a un sujeto que consume varias
sustancias consideradas drogas.
Veamos la codificación:
public
class Drogadicto
{
public string Nombre { get; set; }
public IDroga Droga { get;
set; }
public void Drogarse()
{
Droga.ConsumirDroga();
}
}
Esta clase puede hacer instancias a objetos con un
nombre y una droga y un método de consumo.
Veamos las otras clases.
Nuestra interfaz droga que va a interactuar con el
sujeto.
public interface IDroga
{
void ConsumirDroga();
}
Nuestra clase abstracta Droga:
public abstract class Droga
{
protected TipoDeDroga
tipoDeDroga;
protected Droga()
{
}
}
Algunas clases ejemplo de una clase base Droga.
public class Marihuana : Droga,
IDroga
{
public Marihuana()
{
tipoDeDroga = TipoDeDroga.Marihuana;
}
public void
ConsumirDroga()
{
Console.WriteLine("fumando
hierba");
}
}
public class Peyote : Droga,IDroga
{
public Peyote()
{
tipoDeDroga = TipoDeDroga.Peyote;
}
public void
ConsumirDroga()
{
Console.WriteLine("consumiendo
peyote");
}
}
La clase peyote y la clase marihuana heredan y
Droga e implementan su interfaz IDroga, recuerden que es para que interactue
con el sujeto.
Para poder identificar una variedad de sustancias,
un enumerado:
public enum TipoDeDroga
{
Marihuana, Cigarro, Cerveza, Peyote, Lsd
}
Como pueden ver, la acción de ConsumirDroga, es la implementación
de la interfaz IDroga.
Ahora veamos el siguiente escenario.
Un sujeto consume marihuana, después de eso consume peyote:
class Program
{
static void Main(string[]
args)
{
Drogadicto drogadicto1 = new
Drogadicto {Droga = new
Marihuana()};
drogadicto1.Drogarse();
drogadicto1.Droga = new Peyote();
drogadicto1.Drogarse();
Console.ReadKey();
}
}
Cualquier duda al respecto o alguna observación para mejorar
en el código, háganmela saber, se los agradecería.
No sin antes agradecer a Alan Bazán que fue el que me enseño
este ejemplo que fue la pauta para seguir aprendiendo sobre los objetos.
Un saludo.