Skip to content

Instantly share code, notes, and snippets.

Created October 30, 2016 02:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/67e4fe5fe0477d34b24125f741ad0b3a to your computer and use it in GitHub Desktop.
Save anonymous/67e4fe5fe0477d34b24125f741ad0b3a to your computer and use it in GitHub Desktop.
namespace DesignPatterns
{
public abstract class Beverage
{
public string description = "Unknown beverage";
public virtual string GetDescription()
{
return description;
}
public abstract double Cost();
}
}
namespace DesignPatterns
{
public abstract class CondimentDecorator : Beverage
{
public abstract new string GetDescription();
}
}
namespace DesignPatterns
{
public class Espresso : Beverage
{
public Espresso()
{
description = "Espresso";
}
public override double Cost()
{
return 1.99;
}
}
}
namespace DesignPatterns
{
public class Mocha : CondimentDecorator
{
Beverage beverage;
public Mocha(Beverage beverage)
{
this.beverage = beverage;
}
public override string GetDescription()
{
return beverage.GetDescription() + " Mocha";
}
public override double Cost()
{
return 0.20 + beverage.Cost();
}
}
}
using System;
namespace DesignPatterns
{
class Program
{
static void Main(string[] args)
{
Beverage espresso = new Espresso();
Console.WriteLine($"{espresso.description}");
Console.WriteLine(espresso.GetType());
Console.WriteLine($"{espresso.GetDescription()} and {espresso.Cost()}");
espresso = new Mocha(espresso);
Console.WriteLine($"{espresso.description}");
Console.WriteLine(espresso.GetType());
Console.WriteLine($"{espresso.GetDescription()} and {espresso.Cost()}");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment