C# Language
Implementazione del pattern di progettazione di Decorator
Ricerca…
Osservazioni
A favore dell'utilizzo di Decorator:
- è possibile aggiungere nuove funzionalità in fase di esecuzione in diverse configurazioni
- buona alternativa per l'ereditarietà
- il cliente può scegliere la configurazione che desidera utilizzare
Simulazione della caffetteria
Decoratore è uno dei modelli di progettazione strutturale. È usato per aggiungere, rimuovere o modificare il comportamento dell'oggetto. Questo documento ti insegnerà come usare Decorator DP correttamente.
Lascia che ti spieghi l'idea su un semplice esempio. Immagina di essere a Starbobs, famosa compagnia di caffè. È possibile effettuare un ordine per qualsiasi caffè desiderato - con panna e zucchero, con panna e farcitura e molte altre combinazioni! Ma la base di tutte le bevande è il caffè - bevanda scura e amara, che puoi modificare. Scriviamo un semplice programma che simula la macchina del caffè.
Innanzitutto, dobbiamo creare e astrarre una classe che descriva la nostra bevanda di base:
public abstract class AbstractCoffee
{
protected AbstractCoffee k = null;
public AbstractCoffee(AbstractCoffee k)
{
this.k = k;
}
public abstract string ShowCoffee();
}
Ora, creiamo degli extra, come lo zucchero, il latte e il topping. Le classi create devono implementare AbstractCoffee
- lo decoreranno:
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";
}
}
Ora possiamo creare il nostro caffè preferito:
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());
}
}
L'esecuzione del codice produrrà il seguente risultato:
Caffè con Topping con zucchero e latte