Suche…


Bemerkungen

Vorteile der Verwendung von Decorator:

  • Sie können zur Laufzeit neue Funktionen in verschiedenen Konfigurationen hinzufügen
  • gute alternative für vererbung
  • Der Kunde kann die Konfiguration auswählen, die er verwenden möchte

Cafeteria simulieren

Dekorateur ist eines der strukturellen Entwurfsmuster. Es wird verwendet, um das Verhalten eines Objekts hinzuzufügen, zu entfernen oder zu ändern. In diesem Dokument erfahren Sie, wie Sie Decorator DP richtig verwenden.

Lassen Sie mich Ihnen die Idee an einem einfachen Beispiel erklären. Stellen Sie sich vor, Sie sind jetzt in Starbobs, einer berühmten Kaffeegesellschaft. Sie können einen beliebigen Kaffee bestellen - mit Sahne und Zucker, mit Sahne und Topping und viel mehr Kombinationen! Die Basis aller Getränke ist jedoch Kaffee - dunkles, bitteres Getränk, das Sie modifizieren können. Lassen Sie uns ein einfaches Programm schreiben, das eine Kaffeemaschine simuliert.

Zuerst müssen wir eine Klasse erstellen und abstrahieren, die unser Basisgetränk beschreibt:

public abstract class AbstractCoffee
{
    protected AbstractCoffee k = null;

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

    public abstract string ShowCoffee();
}

Lassen Sie uns nun einige Extras wie Zucker, Milch und Topping schaffen. Die erstellten Klassen müssen AbstractCoffee implementieren - sie werden es dekorieren:

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

Jetzt können wir unseren Lieblingskaffee kreieren:

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

    }
}

Beim Ausführen des Codes wird die folgende Ausgabe erzeugt:

Kaffee mit Belag mit Zucker mit Milch



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow