C# Language
Implementering av dekoratörsdesignmönster
Sök…
Anmärkningar
Fördelar med att använda Decorator:
- du kan lägga till nya funktioner under körning i olika konfigurationer
- bra alternativ för arv
- klienten kan välja konfiguration han vill använda
Simulera cafeteria
Dekoratör är ett av konstruktionsmönster. Det används för att lägga till, ta bort eller ändra beteende hos objekt. Detta dokument kommer att lära dig hur du använder Decorator DP på rätt sätt.
Låt mig förklara idén med det på ett enkelt exempel. Föreställ dig att du nu är i Starbobs, berömt kaffeföretag. Du kan beställa ett kaffe du vill ha - med grädde och socker, med grädde och toppning och mycket mer kombinationer! Men basen för alla drycker är kaffe - mörk, bitter dryck, du kan ändra. Låt oss skriva ett enkelt program som simulerar kaffemaskin.
Först måste vi skapa och abstrakt klass som beskriver vår basdryck:
public abstract class AbstractCoffee
{
protected AbstractCoffee k = null;
public AbstractCoffee(AbstractCoffee k)
{
this.k = k;
}
public abstract string ShowCoffee();
}
Låt oss nu skapa några extrafunktioner, som socker, mjölk och toppning. Skapade klasser måste implementera AbstractCoffee
- de kommer att dekorera det:
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 kan vi skapa vårt favoritkaffe:
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());
}
}
Att köra koden ger följande utgång:
Kaffe med toppning med socker med mjölk