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();
        }
Example #2
0
 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);
 }
Example #3
0
 public ToppingsDecorator(IBeverageItem beverageItem) : base(beverageItem, "ToppingsDecorator")
 {
     _beverageItem = beverageItem;
 }
Example #4
0
 public Decorator(IBeverageItem beverageItem, string roleName)
 {
     this.beverageItem = beverageItem;
     this.roleName     = roleName;
 }
 public SugarDecorator(IBeverageItem beverageItem) : base(beverageItem, "SugarDecorator")
 {
     _beverageItem = beverageItem;
     _sugarPrice   = 0.05M;
 }