C# Language
Wdrażanie wzoru projektowego dekoratora
Szukaj…
Uwagi
Plusy korzystania z Dekoratora:
- możesz dodawać nowe funkcjonalności w czasie wykonywania w różnych konfiguracjach
- dobra alternatywa dla dziedziczenia
- klient może wybrać konfigurację, której chce użyć
Symulowanie stołówki
Dekorator jest jednym z wzorów konstrukcyjnych. Służy do dodawania, usuwania lub zmiany zachowania obiektu. Ten dokument nauczy Cię, jak prawidłowo używać Decorator DP.
Pozwól, że wyjaśnię ci ten pomysł na prostym przykładzie. Wyobraź sobie, że jesteś teraz w słynnej firmie kawowej Starbobs. Możesz złożyć zamówienie na dowolną kawę - ze śmietaną i cukrem, ze śmietaną i polewą i wieloma innymi kombinacjami! Ale podstawą wszystkich napojów jest kawa - ciemny, gorzki napój, który można modyfikować. Napiszmy prosty program symulujący ekspres do kawy.
Najpierw musimy stworzyć abstrakcyjną klasę opisującą nasz napój podstawowy:
public abstract class AbstractCoffee
{
protected AbstractCoffee k = null;
public AbstractCoffee(AbstractCoffee k)
{
this.k = k;
}
public abstract string ShowCoffee();
}
Teraz stwórzmy dodatki, takie jak cukier, mleko i polewy. Utworzone klasy muszą implementować AbstractCoffee
- będą je ozdabiać:
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";
}
}
Teraz możemy stworzyć naszą ulubioną kawę:
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());
}
}
Uruchomienie kodu spowoduje wygenerowanie następującego wyniku:
Kawa z polewą cukrową z mlekiem