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) { 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) { Beverage beverage1 = new DarkRoast(); beverage1 = new Milk(beverage1); beverage1 = new Whip(beverage1); Console.WriteLine("Total Price: {0}, Description: {1}", beverage1.Cost(), beverage1.GetDescription); }
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 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 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 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(); }
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()}"); }
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()); }
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()); }
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()}"); }
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()); }
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(); }
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(); }
public static void Start() { IBeverage beverage = new Espresso(BeverageSize.TALL); Console.WriteLine($"{beverage.Description} ${beverage.Cost()}"); IBeverage beverage2 = new Whip(new Mocha(new Mocha(new DarkRoast(BeverageSize.GRANDE)))); Console.WriteLine($"{beverage2.Description} ${beverage2.Cost()}"); IBeverage beverage4 = new HouseBlend(BeverageSize.VENTI); beverage4 = new Soy(beverage4); beverage4 = new Mocha(beverage4); beverage4 = new Whip(beverage4); Console.WriteLine($"{beverage4.Description} ${beverage4.Cost()}"); }
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); }
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(); }
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()}"); }
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()} $"); }
private static void TestDecoratorPattern() { IBeverage beverage = new Espresso(CoffeeSize.Tall); Console.WriteLine("{0} $ {1}", beverage.Description, beverage.Cost()); IBeverage beverage1 = new DarkRoast(CoffeeSize.Tall); beverage1 = new Mocha(beverage1); beverage1 = new Mocha(beverage1); beverage1 = new Whip(beverage1); Console.WriteLine($"{beverage1.Description} $ {beverage1.Cost()}"); IBeverage beverage2 = new HouseBlend(CoffeeSize.Tall); beverage2 = new Soy(beverage2); beverage2 = new Mocha(beverage2); beverage2 = new Whip(beverage2); Console.WriteLine($"{beverage2.Description} $ {beverage2.Cost()}"); }
static void Main(string[] args) { Beverage beverage1 = new Espresso(); Console.WriteLine(beverage1.ToString() + " $" + beverage1.Cost()); Beverage beverage2 = new DarkRoast(); beverage2 = new Mocha(beverage2); beverage2 = new Mocha(beverage2); beverage2 = new Whip(beverage2); Console.WriteLine(beverage2.ToString() + " $" + beverage2.Cost()); Beverage beverage3 = new HouseBlend(); beverage3 = new Soy(beverage3); beverage3 = new Mocha(beverage3); beverage3 = new Whip(beverage3); Console.WriteLine(beverage3.ToString() + " $" + beverage3.Cost()); Console.ReadLine(); }
public void StarbuzzCoffeeTest() { var beverage = new Espresso(); Console.WriteLine(beverage.Description + " $ " + beverage.Cost()); Beverage beverage2 = new DarkRoast(); beverage2 = new Mocha(beverage2); beverage2 = new Mocha(beverage2); beverage2 = new Whip(beverage2); Console.WriteLine(beverage2.Description + " $ " + beverage2.Cost()); Beverage beverage3 = new HouseBlend(); beverage3 = new Soy(beverage3); beverage3 = new Mocha(beverage3); beverage3 = new Whip(beverage3); Console.WriteLine(beverage3.Description + " $ " + beverage3.Cost()); }
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) { BaseBeverage beverage = new Espresso(); Console.WriteLine(beverage.Description + " $" + beverage.Cost().ToString("0.##")); BaseBeverage beverage2 = new DarkRoast(); beverage2 = new Mocha(beverage2); beverage2 = new Mocha(beverage2); beverage2 = new Whip(beverage2); Console.WriteLine(beverage2.Description + " $" + beverage2.Cost().ToString("0.##")); BaseBeverage beverage3 = new HouseBlend(); beverage3.Size = BaseBeverage.BeverageSize.Venti; beverage3 = new Soy(beverage3); beverage3 = new Mocha(beverage3); beverage3 = new Whip(beverage3); Console.WriteLine(beverage3.Description + " $" + beverage3.Cost().ToString("0.##")); Console.ReadKey(); }
public void TestDecoratorPattern() { Beverage beverage = new Espresso(); Assert.Equal("Espresso $1.99", beverage.Description + " $" + beverage.Cost()); Beverage beverage2 = new DarkRoast(); beverage2 = new Mocha(beverage2); beverage2 = new Mocha(beverage2); beverage2 = new Whip(beverage2); Assert.Equal("Dark Roast Coffee, Mocha, Mocha, Whip $1.49", beverage2.Description + " $" + beverage2.Cost()); Beverage beverage3 = new HouseBlend(); beverage3 = new Soy(beverage3); beverage3 = new Mocha(beverage3); beverage3 = new Whip(beverage3); Assert.Equal("House Blend Coffee, Soy, Mocha, Whip $1.34", beverage3.Description + " $" + beverage3.Cost()); }