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); }
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(); }
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 }
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()}")); }
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(); }
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)); }
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); }
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()); }
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()); }
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); }
public void Main() { Beverage beverage = new Espresso(); Console.WriteLine(beverage.GetDescription() + " $" + beverage.Cost()); Beverage beverage1 = new DarkRoast(); beverage1 = new Mocha(beverage1); }
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()}"); }
public void Cost_WithMocha_ReturnOneDollarAndNineteenCents() { Beverage darkRoastCoffee = new DarkRoast(); darkRoastCoffee = new Mocha(darkRoastCoffee); var cost = darkRoastCoffee.Cost(); cost.Should().Be(1.19m); }
public void Cost_WithMocha_ReturnTwoDollarAndNineteenCents() { Beverage espresso = new Espresso(); espresso = new Mocha(espresso); var cost = espresso.Cost(); cost.Should().Be(2.19m); }
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(); }
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 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 (); }
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(); }
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(); }
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); }