Example #1
0
        static void Main(string[] args)
        {
            var view      = new ConsoleView();
            var beverages = BeverageProvider.GetBeverages();

            // create beverage
            var beverage = beverages.Take(1).FirstOrDefault();

            // add CondimentDecorators
            // add Mocha
            beverage = new Mocha(beverage)
            {
                Cost = .60M
            };
            beverage = new Mocha(beverage)
            {
                Cost = .60M
            };

            // add Soy
            beverage = new Soy(beverage)
            {
                Cost = .40M
            };

            // add Whip
            beverage = new Whip(beverage)
            {
                Cost = .45M
            };

            view.Show(beverage);
        }
        /// <summary>
        /// # Motivation
        /// I can now attach responsibilities to an object dynamically to add behaviour at runtime.
        ///
        /// # Structure
        /// Beverage
        ///  --> base class so all objects are of same type
        /// CondimentDecorator : Bevarage
        ///  --> interchangeable with Beverage
        ///
        /// # Sample Problem
        /// A coffee shop wants to make an ordering system for all their drinks. Ofcourse there are a lot of combination with condiments/roasts.
        /// We could create a base class and let all possible combinations inherit from the superclass and override their behaviour, but that would quickly become a mess.
        ///
        /// # Solution
        /// By creating a Decorator class which inherits from the baseclass (to effectively swap between types), I can now dynamically create composite objects at runtime.
        /// To add a drink to the system:
        ///     1. inherit from the base class, set instance fields in constructor
        ///     2. override the 'Cost()' method to return desired cost
        /// To add a condiment to the system:
        ///     1. inherit from 'CondimentDecorator' (indirectly from base class as well
        ///     2. add instance field from type Beverage
        ///     3. initialize in constructor
        ///     4. override GetDescription() and Cost() accordingly
        /// To create a composite object at runtime:
        ///     1. Create a new instance of a drink (Beverage)
        ///     2. To add a condiment, assign the instance to a new instance of the condiment with itself as param
        ///         A. Beverage darkRoast = new DarkRoast();
        ///         B. darkRoast = new Mocha(darkRoast);
        /// </summary>
        public void Test()
        {
            Beverage beverage = new Espresso();

            Console.WriteLine($"{beverage.GetDescription()} ${beverage.Cost()}");

            Beverage beverage1 = new DarkRoast();

            beverage1 = new Mocha(beverage1);
            Console.WriteLine($"{beverage1.GetDescription()} ${beverage1.Cost()}");

            Beverage beverage2 = new DarkRoast();

            beverage2 = new Mocha(beverage2);
            Console.WriteLine($"{beverage2.GetDescription()} ${beverage2.Cost()}");
            beverage2 = new Mocha(beverage2);
            Console.WriteLine($"{beverage2.GetDescription()} ${beverage2.Cost()}");
            beverage2 = new Whip(beverage2);
            Console.WriteLine($"{beverage2.GetDescription()} ${beverage2.Cost()}");

            Beverage beverage3 = new HouseBlend();

            beverage3 = new Soy(beverage3);
            beverage3 = new Mocha(beverage3);
            beverage3 = new Whip(beverage3);

            Console.WriteLine($"{beverage3.GetDescription()} ${beverage3.Cost()}");
        }
        public void DecoratorTest()
        {
            DIServiceLocator.Current.RegisterInstance(typeof(ITextProvider));
            Support.Configure();

            Beverage beverage = new Espresso();

            beverage = new Mocha(beverage);
            Assert.AreEqual(beverage.Description, "Espresso, Mocha");
            Assert.AreEqual(beverage.Cost(), 2.19);

            Beverage beverage2 = new DarkRoast();

            beverage2 = beverage2.AddComponent <Mocha>();
            beverage2 = beverage2.AddComponent <Mocha>();
            beverage2 = beverage2.AddComponent <Whip>();
            Assert.AreEqual(beverage2.Description, "Dark Roast, Mocha, Mocha, Whip");
            Assert.AreEqual(beverage2.Cost(), 1.49);

            Beverage beverage3 = new HouseBlend();

            SupportExtensions.AddComponent <Soy>(ref beverage3);
            SupportExtensions.AddComponent <Mocha>(ref beverage3);
            SupportExtensions.AddComponent <Whip>(ref beverage3);
            Assert.AreEqual(beverage3.Description, "House Blend Coffee, Soy, Mocha, Whip");
            Assert.AreEqual(beverage3.Cost(), 1.34);
        }
Example #4
0
        static void Main(string[] args)
        {
            Beverage beverage = new Expresso();

            Console.WriteLine("Beverage #1: " + beverage.getDescription() + " $" + beverage.cost());


            Beverage beverage2 = new DarkRoast();

            beverage2 = new Mocha(beverage2);
            beverage2 = new Mocha(beverage2);
            beverage2 = new Whip(beverage2);

            Console.WriteLine("\nBeverage #2: " + beverage2.getDescription() + " $" + beverage2.cost());


            Beverage beverage3 = new HouseBlend();

            beverage3 = new Soy(beverage3);
            beverage3 = new Mocha(beverage3);
            beverage3 = new Whip(beverage3);

            Console.WriteLine("\nBeverage #3: " + beverage3.getDescription() + " $" + beverage3.cost());


            //keep window open
            Console.ReadLine();
        }
Example #5
0
        static void Main(string[] args)
        {
            //LargePizza largePizza = new LargePizza();
            Pizza largePizza = new LargePizza();

            largePizza = new Cheese(largePizza);
            largePizza = new Ham(largePizza);
            largePizza = new Peppers(largePizza);

            //Console.WriteLine(largePizza.Description);
            Console.WriteLine(largePizza.GetDescription());
            Console.WriteLine("{0:C2}", largePizza.CalculateCost());

            Console.ReadKey();
            Console.WriteLine();

            Beverage coffee = new Espresso();

            coffee = new Mocha(coffee);
            coffee = new Mocha(coffee);
            coffee = new Whip(coffee);

            Console.WriteLine(coffee.GetDescription());
            Console.WriteLine("{0:C2}", coffee.Cost());

            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            IBeverage beverage = new DarkRoast();

            System.Console.WriteLine($"{beverage.GetDescription()}: ${beverage.GetCost()}\n");

            beverage = new Soy(beverage);
            System.Console.WriteLine($"{beverage.GetDescription()}: ${beverage.GetCost()}\n");
            beverage = new Whip(beverage);
            System.Console.WriteLine($"{beverage.GetDescription()}: ${beverage.GetCost()}\n");
            beverage = new Mocha(beverage);
            System.Console.WriteLine($"{beverage.GetDescription()}: ${beverage.GetCost()}\n");
            beverage = new Mocha(beverage);
            System.Console.WriteLine($"{beverage.GetDescription()}: ${beverage.GetCost()}\n");
            beverage = new Whip(beverage);
            System.Console.WriteLine($"{beverage.GetDescription()}: ${beverage.GetCost()}\n");
            beverage = new Whip(beverage);
            System.Console.WriteLine($"{beverage.GetDescription()}: ${beverage.GetCost()}\n");
            beverage = new Whip(beverage);
            System.Console.WriteLine($"{beverage.GetDescription()}: ${beverage.GetCost()}\n");
            beverage = new Whip(beverage);
            System.Console.WriteLine($"{beverage.GetDescription()}: ${beverage.GetCost()}\n");
            beverage = new Whip(beverage);
            System.Console.WriteLine($"{beverage.GetDescription()}: ${beverage.GetCost()}\n");
            beverage = new Whip(beverage);

            System.Console.WriteLine($"{beverage.GetDescription()}: ${beverage.GetCost()}\n");
            Console.ReadLine();
        }
    static void Main()
    {
        Beverage espresso = new Espresso();
        Beverage mocha    = new Mocha(espresso);

        Console.WriteLine(mocha.Description);     // Prints Espresso, Mocha
    }
Example #8
0
        internal static void ExecuteDecorator()
        {
            //Intent
            //  • Attach additional responsibilities to an object dynamically.
            //      Decorators provide a flexible alternative to subclassing for extending
            //      functionality.
            //  • Client - specified embellishment of a core object by recursively
            //      wrapping it.
            //  • Wrapping a gift, putting it in a box, and wrapping the box.

            //Problem
            //  You want to add behavior or state to individual objects at run-time.
            //  Inheritance is not feasible because it is static and applies to an entire
            //  class.

            Beverage beverage  = new Cream(new Cream(new Espresso()));
            Beverage beverage2 = new Mocha(new Milk(new Americano()));


            Console.WriteLine(String.Format($"Beverage: {beverage.GetName()}"));
            Console.WriteLine(String.Format($"Cost: {beverage.GetCost()}"));

            Console.WriteLine(String.Format($"Beverage: {beverage2.GetName()}"));
            Console.WriteLine(String.Format($"Cost: {beverage2.GetCost()}"));
        }
Example #9
0
        static void Main(string[] args)
        {
            Beverage beverage = new Expresso();

            Console.WriteLine(beverage.GetDescription() + " R$" + beverage.Cost());
            Console.WriteLine();

            Beverage beverage2 = new DarkRoast();

            beverage2 = new Mocha(beverage2);
            beverage2 = new Mocha(beverage2);
            beverage2 = new Whip(beverage2);
            Console.WriteLine(beverage2.GetDescription() + " R$" + beverage2.Cost());
            Console.WriteLine();

            Beverage beverage3 = new HouseBlend();

            beverage3 = new Soy(beverage3);
            beverage3 = new Mocha(beverage3);
            beverage3 = new Whip(beverage3);
            Console.WriteLine(beverage3.GetDescription() + " R$" + beverage3.Cost());
            Console.WriteLine();

            Console.ReadKey();
        }
Example #10
0
        static void Main(string[] args)
        {
            Beverage beverage1 = new Espresso();

            Console.WriteLine(beverage1);

            Beverage beverage1Small = new Espresso();

            beverage1Small.SetSize(CupSize.Small);
            Console.WriteLine(beverage1Small);

            Beverage beverage2 = new DarkRoast();

            beverage2 = new Mocha(beverage2);
            beverage2 = new Mocha(beverage2);
            beverage2 = new Whip(beverage2);
            Console.WriteLine(beverage2);

            Beverage beverage3 = new HouseBlend();

            beverage3 = new Soy(beverage3);
            beverage3 = new Mocha(beverage3);
            beverage3 = new Whip(beverage3);
            Console.WriteLine(beverage3);

            Beverage beverage3Big = new HouseBlend(CupSize.Big);

            beverage3Big = new Soy(beverage3Big);
            beverage3Big = new Mocha(beverage3Big);
            beverage3Big = new Whip(beverage3Big);
            Console.WriteLine(beverage3Big);
        }
        public void CondimentDecorator_DecorateDescriptionIsValid()
        {
            IBeverage           coffee = new SimpleCoffee();
            ICondimentDecorator drink  = new Mocha(coffee);

            Assert.AreEqual("I am a mocha decorator", drink.DecoratorDescription);
        }
        public void CostIsComputedWithMocha()
        {
            DarkRoast          darkRoast          = new DarkRoast();
            CondimentDecorator darkRoastWithMocha = new Mocha(darkRoast);

            Assert.That(darkRoastWithMocha.Cost(), Is.EqualTo(2.5));
        }
Example #13
0
 public void DarkRoastWithMochaWithWhipWithMilk()
 {
     Beverage beverage = new DarkRoast();
     beverage = new Mocha(beverage);
     beverage = new Whip(beverage);
     beverage = new Milk(beverage);
     Assert.AreEqual(1.39, beverage.Cost(),DELTA);
 }
        public void DescriptionWithMochaAndEspresso()
        {
            DarkRoast          darkRoast                 = new DarkRoast();
            CondimentDecorator darkRoastWithMocha        = new Mocha(darkRoast);
            CondimentDecorator darkRoastWithMochaAndMilk = new Milk(darkRoastWithMocha);

            Assert.That(darkRoastWithMochaAndMilk.Description, Is.EqualTo("The Best Dark Roast, mocha, milk"));
        }
        public void CostIsComputedWithMochaAndEspresso()
        {
            DarkRoast          darkRoast                 = new DarkRoast();
            CondimentDecorator darkRoastWithMocha        = new Mocha(darkRoast);
            CondimentDecorator darkRoastWithMochaAndMilk = new Milk(darkRoastWithMocha);

            Assert.That(darkRoastWithMochaAndMilk.Cost(), Is.EqualTo(3.25));
        }
        public void TestDecaf()
        {
            Beverage beverage = new Decaf();

            beverage = new Mocha(beverage);
            beverage = new Whip(beverage);
            Assert.AreEqual("Decaf Coffee, Mocha, Whip $1.35", beverage.GetDescription() +
                            " $" + beverage.Cost());
        }
        public void DarkRoastWithMochaWithWhipWithMilk()
        {
            Beverage beverage = new DarkRoast();

            beverage = new Mocha(beverage);
            beverage = new Whip(beverage);
            beverage = new Milk(beverage);
            Assert.AreEqual(1.39, beverage.Cost(), DELTA);
        }
Example #18
0
        public void HouseBlendWithSoyWithMochaWithWhip()
        {
            Beverage beverage = new HouseBlend();
            beverage = new Soy(beverage);
            beverage = new Mocha(beverage);
            beverage = new Whip(beverage);

            Assert.AreEqual(1.34, beverage.Cost(),DELTA);
        }
        public void TestDarkRoast()
        {
            Beverage beverage = new DarkRoast();

            beverage = new Mocha(beverage);
            beverage = new Soy(beverage);
            Assert.AreEqual("Dark Roast Coffee, Mocha, Soy $1.34", beverage.GetDescription() +
                            " $" + beverage.Cost());
        }
Example #20
0
        private void RunDecoratorPatternExample()
        {
            Beverage beverage = new Espresso();

            beverage = new Whip(beverage).GetBeverage;
            beverage = new Mocha(beverage).GetBeverage;

            DisplayInfoAboutBeverageInListBox(beverage);
        }
        public void TestHouseBlend()
        {
            Beverage beverage = new HouseBlend();

            beverage = new Mocha(beverage);
            beverage = new SteamedMilk(beverage);
            Assert.AreEqual("House Blend Coffee, Mocha, Steamed Milk $1.09", beverage.GetDescription() +
                            " $" + beverage.Cost());
        }
Example #22
0
        public void DarkRoastMochaWithWhip()
        {
            IBeverage roast = new DarkRoast(BeverageSize.Large);

            roast = new Mocha(roast);
            roast = new Whip(roast);

            Debug.WriteLine(roast.Description);
            Debug.WriteLine("Cost: " + roast.Cost);
        }
Example #23
0
        public void Main()
        {
            Beverage beverage = new Espresso();

            Console.WriteLine(beverage.GetDescription() + " $" + beverage.Cost());

            Beverage beverage1 = new DarkRoast();

            beverage1 = new Mocha(beverage1);
        }
Example #24
0
        static void TestDecorator()
        {
            IBeverage beverage = new Espresso();

            beverage = new Mocha(beverage);
            beverage = new Mocha(beverage);
            beverage = new Whip(beverage);
            Console.WriteLine($"Cost:{{{beverage.GetCost()}}}");
            Console.WriteLine($"Order details: {beverage.GetName()}");
        }
Example #25
0
        public void Cost_WithMocha_ReturnOneDollarAndNineteenCents()
        {
            Beverage darkRoastCoffee = new DarkRoast();

            darkRoastCoffee = new Mocha(darkRoastCoffee);

            var cost = darkRoastCoffee.Cost();

            cost.Should().Be(1.19m);
        }
Example #26
0
        public void Cost_WithMocha_ReturnTwoDollarAndNineteenCents()
        {
            Beverage espresso = new Espresso();

            espresso = new Mocha(espresso);

            var cost = espresso.Cost();

            cost.Should().Be(2.19m);
        }
Example #27
0
        public void Cost_WithMocha_ReturnOneDollarAndTwentyFiveCents()
        {
            Beverage decaf = new Decaf();

            decaf = new Mocha(decaf);

            var cost = decaf.Cost();

            cost.Should().Be(1.25m);
        }
        public void HouseBlendWithSoyWithMochaWithWhip()
        {
            Beverage beverage = new HouseBlend();

            beverage = new Soy(beverage);
            beverage = new Mocha(beverage);
            beverage = new Whip(beverage);

            Assert.AreEqual(1.34, beverage.Cost(), DELTA);
        }
        public void ShowPattern()
        {
            Beverage beverage1 = new Espresso();
            beverage1 = new Mocha(beverage1);
            beverage1 = new Mocha(beverage1);
            beverage1 = new Whip(beverage1);

            var desc = beverage1.GetDescription();
            var total = beverage1.Cost();
        }
Example #30
0
        public static void Run()
        {
            Beverage beverage = new Espresso();

            Console.WriteLine(beverage.description + " $" + beverage.cost());
            Console.WriteLine();

            Beverage beverage2 = new DarkRoast();

            beverage2 = new Mocha(beverage2);
            beverage2 = new Mocha(beverage2);
            beverage2 = new Whip(beverage2);
            Console.WriteLine(beverage2.description + " $" + beverage2.cost());
            Console.WriteLine();

            Beverage beverage3 = new HouseBlend();

            beverage3 = new Soy(beverage3);
            beverage3 = new Mocha(beverage3);
            beverage3 = new Whip(beverage3);
            Console.WriteLine(beverage3.description + " $" + beverage3.cost());
            Console.WriteLine();

            Beverage beverage4 = new HouseBlend();

            beverage4.size = Beverage.Size.GRANDE;
            Console.WriteLine("Setting size to: {0}", beverage4.size);
            beverage4 = new Soy(beverage4);
            beverage4 = new Mocha(beverage4);
            beverage4 = new Whip(beverage4);
            Console.WriteLine(beverage4.description + " $" + beverage4.cost());
            Console.WriteLine();

            Beverage beverage5 = new HouseBlend();

            beverage5.size = Beverage.Size.TALL;
            Console.WriteLine("Setting size to: {0}", beverage5.size);
            beverage5 = new Soy(beverage5);
            beverage5 = new Mocha(beverage5);
            beverage5 = new Whip(beverage5);
            Console.WriteLine(beverage5.description + " $" + beverage5.cost());
            Console.WriteLine();

            Beverage beverage6 = new HouseBlend();

            beverage6.size = Beverage.Size.VENTI;
            Console.WriteLine("Setting size to: {0}", beverage6.size);
            beverage6 = new Soy(beverage6);
            beverage6 = new Mocha(beverage6);
            beverage6 = new Whip(beverage6);
            Console.WriteLine(beverage6.description + " $" + beverage6.cost());
            Console.WriteLine();

            Console.ReadKey();
        }
        public void ShowPattern()
        {
            Beverage beverage1 = new Espresso();

            beverage1 = new Mocha(beverage1);
            beverage1 = new Mocha(beverage1);
            beverage1 = new Whip(beverage1);

            var desc  = beverage1.GetDescription();
            var total = beverage1.Cost();
        }
        public void TestExpressoWithSize()
        {
            BeverageSize beverageSize = BeverageSize.GRANDE;
            Beverage     beverage     = new Expresso();

            beverage.Size = beverageSize;
            beverage      = new Mocha(beverage);
            beverage.Size = beverageSize;
            Assert.AreEqual("Expresso, Mocha $1.9", beverage.GetDescription() +
                            " $" + beverage.Cost());
        }
        public void Test()
        {
            DarkRoast darkRoast = new DarkRoast();
            Milk      milk      = new Milk(darkRoast);
            Mocha     mocha     = new Mocha(milk);
            Soy       soy       = new Soy(mocha);
            Whip      whip      = new Whip(soy);

            Assert.Equal("Dark Roast, Milk, Mocha, Soy, Whip",
                         whip.GetDescription());
        }
        protected void btn_Decorator_Click(object sender, EventArgs e)
        {
            EBeverageSize eSize = EBeverageSize.Venti;
            Beverage beverage = null;
            switch (rdol_Size.SelectedValue)
            {
                case "Venti":
                    eSize = EBeverageSize.Venti;
                    break;
                case "Grande":
                    eSize = EBeverageSize.Grande;
                    break;
                case "Tall":
                    eSize = EBeverageSize.Tall;
                    break;
            }
            switch (rdol_Beverage.SelectedValue)
            {
                case "HouseBlend":
                    beverage = new HouseBlend(eSize);

                    break;
                case "Espresso":
                    beverage = new Espresso(eSize);
                    break;
            }
            var checkBoxSelect = from chkl in chkl_Decorator.Items.Cast<ListItem>() where chkl.Selected == true  select chkl;
            foreach (var chklItem in checkBoxSelect)
            {
                switch (chklItem.Value)
                {
                    case "Mocha":
                        beverage = new Mocha(beverage);
                        break;
                    case "Whip":
                        beverage = new Whip(beverage);

                        break;
                    case "Milk":
                        beverage = new Milk(beverage);

                        break;
                    case "Soy":
                        beverage = new Soy(beverage);
                        break;
                }
            }
            lbl_Decoraor.Text = beverage.getDescription();
            lbl_Price.Text = beverage.cost().ToString ();
        }
Example #35
0
        static void Main(string[] args)
        {
            Beverage beverage = new Espresso();

            Console.WriteLine("{0} ${1}", beverage.GetDescription(), beverage.Cost());
            beverage.SetSize(3);
            Console.WriteLine("{0} ${1}", beverage.GetDescription(), beverage.Cost());

            Beverage beverage2 = new Mocha(beverage);
            Console.WriteLine("{0} ${1}", beverage2.GetDescription(), beverage2.Cost());
            beverage2 = new Mocha(beverage2);
            Console.WriteLine("{0} ${1}", beverage2.GetDescription(), beverage2.Cost());

            beverage2.SetSize(2);
            Console.WriteLine("{0} ${1}", beverage2.GetDescription(), beverage2.Cost());
            Console.ReadKey();
        }
Example #36
0
        static void Main(string[] args)
        {
            Beverage beverage = new Expresso();
            Console.WriteLine("Beverage #1: "+beverage.getDescription() + " $"+ beverage.cost());

            Beverage beverage2 = new DarkRoast();
            beverage2 = new Mocha(beverage2);
            beverage2 = new Mocha(beverage2);
            beverage2 = new Whip(beverage2);

            Console.WriteLine("\nBeverage #2: " + beverage2.getDescription() + " $" + beverage2.cost());

            Beverage beverage3 = new HouseBlend();
            beverage3 = new Soy(beverage3);
            beverage3 = new Mocha(beverage3);
            beverage3 = new Whip(beverage3);

            Console.WriteLine("\nBeverage #3: " + beverage3.getDescription() + " $" + beverage3.cost());

            //keep window open
            Console.ReadLine();
        }
Example #37
0
        public static void TestDecorate()
        {
            Console.WriteLine("\n\n\n--------------------测试装饰者模式--------------------");
            //客人点了一杯espresso
            Beverage espresso = new Espresso();
            //客人点了一杯拿铁
            Beverage natie = new NaTie();
            espresso = new Milk(espresso);//添加牛奶
            espresso = new Sugar(espresso);//添加糖

            var desEspresso = espresso.getDescription();
            var costEspresso = espresso.Cost();
            Console.WriteLine("{0}共花费了{1}元", desEspresso, costEspresso);

            natie = new Milk(natie);//加奶
            natie = new Milk(natie);//加奶
            natie = new Sugar(natie);//加糖
            natie = new Mocha(natie);//加摩卡

            var desNatie = natie.getDescription();
            var costNatie = natie.Cost();
            Console.WriteLine("{0}共花费了{1}元", desNatie, costNatie);
        }