C#

Decorator Pattern – Structural – C#

The decorator pattern allows behavior to be added to an individual object.

Example c#

 

 public abstract class BaseSalad
{
    protected double myPrice;

    public virtual double GetPrice()
    {
        return this.myPrice;
    }
}

public abstract class ExtrasDecorator : BaseSalad
{
    protected BaseSalad salad;
    public ExtrasDecorator(BaseSalad saladToDecorate)
    {
        this.salad = saladToDecorate;
    }

    public override double GetPrice()
    {
        return (this.pizza.GetPrice() + this.myPrice);
    }
}

class Program
{
    static void Main()
    {
      
        GreenSalad salad = new GreenSalad();
        Console.WriteLine("Plain GreenSalad: " + salad.GetPrice().ToString());

        ExtraCucumbers moreCucumbers = new ExtraCucumbers(salad);
        ExtraCucumbers someMoreCucumbers = new ExtraCucumbers(moreCucumbers);
        Console.WriteLine("Plain Green Salad with double extra cucumbers: " + someMoreCucumbers.GetPrice().ToString());

        ExtraTomatoes extraTomatoes = new ExtraTomatoes(someMoreCucumbers);
        Console.WriteLine("Plain GreenSalad with double extra cucumbers with tomatoes: " + extraTomatoes.GetPrice().ToString());
 
    }
}

public class GreenSalad: BaseSalad
{
    public GreenSalad()
    {
        this.myPrice = 3.75;
    }
}

public class ExtraCucumbers : ExtrasDecorator
{
    public ExtraCucumbers(BaseSalad saladToDecorate)
        : base(saladToDecorate)
    {
        this.myPrice = 1.30;
    }
}

public class ExtraTomatoes : ExtrasDecorator
{
    public ExtraTomatoes(BaseSalad saladToDecorate)
        : base(saladToDecorate)
    {
        this.myPrice = 1.62;
    }
}