Zoeken…


Opmerkingen

Voordelen van het gebruik van Decorator:

  • u kunt nieuwe functies toevoegen tijdens runtime in verschillende configuraties
  • goed alternatief voor erfenis
  • client kan de configuratie kiezen die hij wil gebruiken

Simulatie van cafetaria

Decorateur is een van de structurele ontwerppatronen. Het wordt gebruikt om het gedrag van een object toe te voegen, te verwijderen of te wijzigen. In dit document leert u hoe u Decorator DP op de juiste manier gebruikt.

Laat me het idee ervan aan u uitleggen aan de hand van een eenvoudig voorbeeld. Stel je voor dat je nu in het beroemde koffiebedrijf Starbobs bent. U kunt een bestelling plaatsen voor elke gewenste koffie - met room en suiker, met room en topping en nog veel meer combinaties! Maar de basis van alle drankjes is koffie - een donkere, bittere drank die je kunt aanpassen. Laten we een eenvoudig programma schrijven dat een koffiemachine simuleert.

Eerst moeten we een abstracte klasse maken die onze basisdrank beschrijft:

public abstract class AbstractCoffee
{
    protected AbstractCoffee k = null;

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

    public abstract string ShowCoffee();
}

Laten we nu enkele extra's maken, zoals suiker, melk en topping. Aangemaakte klassen moeten AbstractCoffee implementeren - ze zullen het versieren:

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";
    }
}

Nu kunnen we onze favoriete koffie maken:

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());

    }
}

Het uitvoeren van de code levert de volgende uitvoer op:

Koffie met topping met suiker met melk



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow