코딩 공부/디자인패턴
데코레이터 패턴
공부를 함
2024. 12. 3. 16:43
Decorator Pattern
#region Base
public abstract class Beverage
{
public string Description { get; set; }
public abstract double Cost();
}
public abstract class CondimentDecorator : Beverage
{
protected Beverage beverage;
}
#endregion
#region Baverage
public class Espresso : Beverage
{
public Espresso() { Description = "Espresso"; }
public override double Cost() { return 1.99; }
}
public class HouseBlend : Beverage
{
public HouseBlend() { Description = "House Blend"; }
public override double Cost() { return 0.89; }
}
#endregion
#region CondimentDecorator
public class Mocha : CondimentDecorator
{
public Mocha(Beverage beverage) { this.beverage = beverage; Description = beverage.Description + ", Mocha"; }
public override double Cost() { return 0.20 + beverage.Cost(); }
}
public class Soy : CondimentDecorator
{
public Soy(Beverage beverage) { this.beverage = beverage; Description = beverage.Description + ", Soy"; }
public override double Cost() { return 0.15 + beverage.Cost(); }
}
public class Whip : CondimentDecorator
{
public Whip(Beverage beverage) { this.beverage = beverage; Description = beverage.Description + ", Whip"; }
public override double Cost() { return 0.10 + beverage.Cost(); }
}
#endregion
public class StarbuzzCoffee
{
public static void Main(string[] args)
{
Beverage beverage = new Espresso();
Console.WriteLine($"{beverage.Description} costs ${beverage.Cost():F2}");
Beverage beverage2 = new HouseBlend();
beverage2 = new Mocha(beverage2);
beverage2 = new Mocha(beverage2);
beverage2 = new Whip(beverage2);
Console.WriteLine($"{beverage2.Description} costs ${beverage2.Cost():F2}");
}
}