static void Main(string[] args) { Decorator decorator = new ToppingsDecorator(new SugarDecorator(new Cocoa())); IBeverageItem baseItem = null; var removed = decorator.RemoveRole("ToppingsDecorator"); if (removed is Decorator) { decorator = (Decorator)removed; } else if (removed is IBeverageItem) { baseItem = decorator.RemoveRole("ToppingsDecorator"); } removed = decorator.RemoveRole("SugarDecorator"); if (removed is Decorator) { decorator = (Decorator)removed; } else if (removed is IBeverageItem) { baseItem = decorator.RemoveRole("SugarDecorator"); } if (baseItem == null && decorator.CheckRole("SugarDecorator")) { var item = (SugarDecorator)decorator.GetRole("SugarDecorator"); item.AddSugar(3); } if (baseItem == null && decorator.CheckRole("ToppingsDecorator")) { ((ToppingsDecorator)decorator).AddTopping(new ToppingHelper.Topping[] { ToppingHelper.Topping.Cream, ToppingHelper.Topping.Chocolate }); } if (baseItem != null) { baseItem.MakeDrink(); } else { decorator.MakeDrink(); } Console.ReadKey(); }
public IBeverageItem RemoveRole(string role) { if (roleName == role) { return(beverageItem); } if (beverageItem is Decorator decorator) { if (decorator.roleName == role) { beverageItem = decorator.beverageItem; return(this); } decorator.RemoveRole(role); } return(this); }
public ToppingsDecorator(IBeverageItem beverageItem) : base(beverageItem, "ToppingsDecorator") { _beverageItem = beverageItem; }
public Decorator(IBeverageItem beverageItem, string roleName) { this.beverageItem = beverageItem; this.roleName = roleName; }
public SugarDecorator(IBeverageItem beverageItem) : base(beverageItem, "SugarDecorator") { _beverageItem = beverageItem; _sugarPrice = 0.05M; }