C# Language
Implementierung des Decorator Design Pattern
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