Patrón de estrategia, explicado de forma sencilla.

on sábado, 22 de febrero de 2014


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.

1 comentarios:

Quemados Torreón dijo...

Hubiera quedado mejor explicado en lugar de Droga que fuera Drogadicto, porque un drogra no puede ejecutar la accion, en cambio una persona si

Publicar un comentario