public abstract int Cost();
abstract class AddOnDecorator : Beverage
public abstract override int Cost();
class CaramelDecorator : AddOnDecorator
Beverage myBeverage = null;
public CaramelDecorator(Beverage beverage)
public override int Cost()
return myBeverage.Cost() + 1;
class WhippedCreamDecorator : AddOnDecorator
Beverage myBeverage = null;
public WhippedCreamDecorator(Beverage beverage)
public override int Cost()
return myBeverage.Cost() + 2;
class Espresso : Beverage
public override int Cost()
public static void Main()
var myDrink = new Espresso();
var myCaramelEspresso = new CaramelDecorator(myDrink);
var myCaramelEspressoWithWhippedCream = new WhippedCreamDecorator(myCaramelEspresso);
Console.WriteLine("My drink now costs {0}", myCaramelEspressoWithWhippedCream.Cost());