Buscar..


Observaciones

Ventajas de usar Decorador:

  • Puedes agregar nuevas funcionalidades en tiempo de ejecución en diferentes configuraciones
  • buena alternativa para la herencia
  • el cliente puede elegir la configuración que quiere usar

Simulando cafeteria

Decorador es uno de los patrones de diseño estructural. Se utiliza para agregar, eliminar o cambiar el comportamiento del objeto. Este documento le enseñará cómo usar Decorator DP correctamente.

Déjame explicarte la idea de ello en un ejemplo simple. Imagina que ahora estás en Starbobs, famosa compañía de café. ¡Puede hacer un pedido de cualquier café que desee, con crema y azúcar, con crema y cobertura y muchas más combinaciones! Pero, la base de todas las bebidas es café: bebida oscura y amarga, que puede modificar. Vamos a escribir un programa simple que simule la máquina de café.

Primero, necesitamos crear una clase abstracta que describa nuestra bebida base:

public abstract class AbstractCoffee
{
    protected AbstractCoffee k = null;

    public AbstractCoffee(AbstractCoffee k)
    {
        this.k = k;
    }

    public abstract string ShowCoffee();
}

Ahora, vamos a crear algunos extras, como azúcar, leche y topping. Las clases creadas deben implementar AbstractCoffee - lo decorarán:

public class Milk : AbstractCoffee
{
    public Milk(AbstractCoffee c) : base(c) { }
    public override string ShowCoffee()
    {
        if (k != null)
            return k.ShowCoffee() + " with Milk";
        else return "Milk";
    }
}
public class Sugar : AbstractCoffee
{
    public Sugar(AbstractCoffee c) : base(c) { }

    public override string ShowCoffee()
    {
        if (k != null) return k.ShowCoffee() + " with Sugar";
        else return "Sugar";
    }
}
public class Topping : AbstractCoffee
{
    public Topping(AbstractCoffee c) : base(c) { }

    public override string ShowCoffee()
    {
        if (k != null) return k.ShowCoffee() + " with Topping";
        else return "Topping";
    }
}

Ahora podemos crear nuestro café favorito:

public class Program
{
    public static void Main(string[] args)
    {
        AbstractCoffee coffee = null; //we cant create instance of abstract class
        coffee = new Topping(coffee); //passing null
        coffee = new Sugar(coffee); //passing topping instance
        coffee = new Milk(coffee);  //passing sugar
        Console.WriteLine("Coffee with " + coffee.ShowCoffee());

    }
}

Ejecutar el código producirá el siguiente resultado:

Café Con Topping Con Azúcar Con Leche



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow