Beispiel #1
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();
        }
        /// <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()}");
        }
        static void Main(string[] args)
        {
            //Основы кофе для декорации
            Bevegare bevegare  = new Espresso();
            Bevegare bevegare1 = new DarkRoast();
            Bevegare bevegare2 = new Decaf();
            Bevegare bevegare3 = new HouseBlind();

            Console.WriteLine($"{bevegare.description} UAH {bevegare.cost()}");
            Console.WriteLine($"{bevegare1.description} UAH {bevegare1.cost()}");
            Console.WriteLine($"{bevegare2.description} UAH {bevegare2.cost()}");
            Console.WriteLine($"{bevegare3.description} UAH {bevegare3.cost()}");
            Console.WriteLine(new string('-', 50));

            //Decorators coffee
            Chocolate chocolate = new Chocolate();
            Milk      milk      = new Milk();
            Mocha     mocha     = new Mocha();
            Whip      whip      = new Whip();

            //Decorator with coffee
            chocolate.SetComponent(bevegare);
            milk.SetComponent(chocolate);
            mocha.SetComponent(milk);
            whip.SetComponent(mocha);

            //Display in screen
            Console.WriteLine($"{chocolate.GetDescription()} UAH {chocolate.cost()}");
            Console.WriteLine($"{milk.GetDescription()} UAH {milk.cost()}");
            Console.WriteLine($"{mocha.GetDescription()} UAH {mocha.cost()}");
            Console.WriteLine($"{whip.GetDescription()} UAH {whip.cost()}");

            Console.ReadLine();
        }
        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(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();
        }
        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 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 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 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());
        }
Beispiel #10
0
        private static void RunDecoratorPattern()
        {
            Beverage beverage = new Espresso();

            Console.WriteLine($"{beverage.GetDescription()} ${beverage.Cost()}");
            Beverage beverage1 = new HouseBlend();

            beverage1 = new Mocha(beverage1);
            beverage1 = new Mocha(beverage1);
            beverage1 = new Whip(beverage1);
            Console.WriteLine($"{beverage1.GetDescription()} ${beverage1.Cost()}");
        }
Beispiel #11
0
        static void Main(string[] args)
        {
            Beverage beverage = new Expresso(Size.Grande);

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

            Beverage beverage2 = new Expresso(Size.Grande);

            beverage2 = new Mocha(beverage2);
            beverage2 = new Whip(beverage2);
            Console.WriteLine(beverage2.GetDescription() + " | " + beverage2.Cost());
        }
        public void StarBuzzCoffee()
        {
            Beverage espresso = new Espresso();

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

            Beverage houseBlend = new HouseBlend();

            houseBlend = new Soy(houseBlend);
            houseBlend = new Mocha(houseBlend);
            houseBlend = new Whip(houseBlend);
            Console.WriteLine(houseBlend.GetDescription() + " $" + houseBlend.Cost());
        }
Beispiel #13
0
        static void RunDecorator()
        {
            Beverage beverage = new Expresso();

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

            Beverage beverage2 = new HouseBlend();

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

            Console.WriteLine(beverage2.GetDescription() + " $ " + beverage2.Cost());
        }
Beispiel #14
0
        static void Main(string[] args)
        {
            Beverage beverage = new Espresso();

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

            //New beverage
            //Wrap it with a mocha, second mocha and then whip
            Beverage beverage2 = new Espresso();

            beverage2 = new Mocha(beverage2);
            beverage2 = new Mocha(beverage2);
            beverage2 = new Whip(beverage2);
            Console.WriteLine($"{beverage2.GetDescription()} : {beverage2.Cost()}");
        }
Beispiel #15
0
        public static void RunStarBuck()
        {
            Console.WriteLine("StarBuck Coffe Order: ");

            Beverage beverage = new Espresso();

            Console.WriteLine(string.Format("{0} : ${1}", beverage.GetDescription(), beverage.GetCost()));

            Beverage beverage2 = new DarkRoast();

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

            Console.WriteLine(string.Format("{0} : ${1}", beverage2.GetDescription(), beverage2.GetCost()));
        }
        public void StarbuzzCafe()
        {
            //Beverage beverage = new Americano();
            //Console.WriteLine(beverage.GetDescription() + " $" + beverage.Cost());

            //beverage = new Mocha(beverage);
            //Console.WriteLine(beverage.GetDescription() + " $" + beverage.Cost());

            Beverage beverage1 = new Americano();

            beverage1 = new Mocha(beverage1);
            beverage1 = new Mocha(beverage1);
            beverage1 = new Whip(beverage1);
            //beverage1 = new DarkRoast();
            Console.WriteLine(beverage1.GetDescription() + " $" + beverage1.Cost());
        }
Beispiel #17
0
        static void Main(string[] args)
        {
            Beverage beverage = new Espresso();

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

            Beverage beverage2 = new HouseBlend();

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

            Beverage beverage3 = new DarkRoase();

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

            //Console.ReadLine();
            Console.WriteLine("---------------------\n");

            // 我买了个苹果手机
            Phone phone = new ApplePhone();
            // 现在想贴膜了
            Decorator applePhoneWithSticker = new Sticker(phone);

            // 扩展贴膜行为
            applePhoneWithSticker.Print();
            Console.WriteLine("----------------------\n");

            // 现在我想有挂件了
            Decorator applePhoneWithAccessories = new Accessories(phone);

            // 扩展手机挂件行为
            applePhoneWithAccessories.Print();
            Console.WriteLine("----------------------\n");

            // 现在我同时有贴膜和手机挂件了
            Sticker     sticker = new Sticker(phone);
            Accessories applePhoneWithAccessoriesAndSticker = new Accessories(sticker);

            applePhoneWithAccessoriesAndSticker.Print();

            Console.ReadLine();
        }
Beispiel #18
0
        static void Main(string[] args)
        {
            Beverage.Beverage espresso = new Espresso();
            Console.WriteLine($"{espresso.GetDescription()}, ${espresso.Cost()}");

            Beverage.Beverage soyHouseBlend = new HouseBlend();
            soyHouseBlend = new Soy(soyHouseBlend);
            Console.WriteLine($"{soyHouseBlend.GetDescription()}, ${soyHouseBlend.Cost()}");

            Beverage.Beverage doubleMochaWithWhipInDarkRoast = new DarkRoast();
            doubleMochaWithWhipInDarkRoast = new Mocha(doubleMochaWithWhipInDarkRoast);
            doubleMochaWithWhipInDarkRoast = new Mocha(doubleMochaWithWhipInDarkRoast);
            doubleMochaWithWhipInDarkRoast = new Whip(doubleMochaWithWhipInDarkRoast);

            Console.WriteLine($"{doubleMochaWithWhipInDarkRoast.GetDescription()}, ${doubleMochaWithWhipInDarkRoast.Cost()}");
            Console.ReadKey();
        }
Beispiel #19
0
        static void Main()
        {
            Beverage beverage1 = new DarkRoast();

            Beverage beverage2 = new Espresso();

            beverage2 = new Milk(beverage2);

            Beverage beverage3 = new DarkRoast();

            beverage3 = new Milk(beverage3);
            beverage3 = new Whip(beverage3);

            Console.WriteLine(beverage1.GetDescription() + "\n" + beverage1.Cost());
            Console.WriteLine(beverage2.GetDescription() + "\n" + beverage2.Cost());
            Console.WriteLine(beverage3.GetDescription() + "\n" + beverage3.Cost());

            Console.ReadKey();
        }
Beispiel #20
0
        public void Expresso_ShouldBeExpressoAndCostThreeDollarsAndFortyCents_WhithMochaWhipAndVenti()
        {
            //Arrange
            BeverageSize beverageSize = BeverageSize.VENTI;
            Beverage     beverage     = new Expresso();

            beverage.Size = beverageSize;
            beverage      = new Mocha(beverage);
            beverage.Size = beverageSize;
            beverage      = new Whip(beverage);

            //Act
            var description = beverage.GetDescription();
            var cost        = beverage.Cost();

            //Assert
            description.Should().Be("Expresso, Mocha, Whip");
            Math.Round(cost, 2).Should().Be(3.4);
        }
Beispiel #21
0
        static void Main(string[] args)
        {
            Beverage beverage = new Espresso();

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

            Beverage beverage2 = new DarkRoast();

            beverage2 = new Mocha(beverage2);
            beverage2 = new Mocha(beverage2);
            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()}");
        }
Beispiel #22
0
        static void Decorator()
        {
            Beverage beverage1 = new Espresso();

            Console.WriteLine(beverage1.GetDescription());
            Console.WriteLine(beverage1.GetCost());

            Beverage beverage2 = new Espresso();

            beverage2 = new Mocha(beverage2);
            Console.WriteLine(beverage2.GetDescription());
            Console.WriteLine(beverage2.GetCost());

            Beverage beverage3 = new Espresso();

            beverage3 = new Mocha(beverage3);
            beverage3 = new Whip(beverage3);
            Console.WriteLine(beverage3.GetDescription());
            Console.WriteLine(beverage3.GetCost());
        }
    static void Main()
    {
        Beverage beverage0 = new Espresso();

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

        Beverage beverage1 = new DarkRoast();

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

        Beverage beverage2 = new HouseBlend();

        beverage2 = new Soy(beverage2);
        beverage2 = new Mocha(beverage2);
        beverage2 = new Whip(beverage2);
        System.Console.WriteLine($"{beverage2.GetDescription()} {beverage2.Cost()} $");
    }
Beispiel #24
0
        static void Main(string[] args)
        {
            Beverage beverage = new Espresso();

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

            Beverage beverageDark = new DarkRoast();

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

            Beverage beverageHouse = new HouseBlend();

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

            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            Beverage bev = new Espresso();

            Console.WriteLine(bev.GetDescription() + "- $" + bev.cost());

            Beverage bev2 = new DarkRoast();

            bev2 = new Soy(bev2);
            bev2 = new Mocha(bev2);
            bev2 = new Soy(bev2);
            Console.WriteLine(bev2.GetDescription() + " - $" + bev2.cost());

            Beverage bev3 = new HouseBlend();

            bev3 = new Soy(bev3);
            bev3 = new Mocha(bev3);
            bev3 = new Whip(bev3);
            bev3 = new Soy(bev3);
            bev3 = new Whip(bev3);
            Console.WriteLine(bev3.GetDescription() + " - $" + bev3.cost());
            Console.ReadKey();
        }