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



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow