public static void Main(string[] args) { // needs to consider if Type/Topping price changes i.e. tea becomes 2.0 // might want to mislabel a customers name later on // was goinng to restrict to only one topping of type milk but users can order extra milk // would have typed Toppings and Drinks as Enum but we need to have flexibility adding and // removing, stringly typed it is // would also wrap statements in tryc / finally or using blocks and add exception handling DrinkBuilder drinkBuilder = new DrinkBuilder(); Barista helen = new Barista(drinkBuilder); var tea = new DrinkType("Tea", 1.5); var milk = new Topping("Milk", 0.5); var sugar = new Topping("Sugar", 0.5); var jonsToppings = new List <Topping>() { milk, sugar }; var jonsDrink = helen.OrderDrink(tea, jonsToppings); var robisToppings = new List <Topping>() { milk }; var robisDrink = helen.OrderDrink(tea, robisToppings); helen.PrepareDrink(jonsDrink); helen.PrepareDrink(robisDrink); helen.StopOrder(jonsDrink); helen.ServeDrinkOrders(); Console.ReadLine(); }
public bool Validate(string type, bool hasSugar, bool hasMilk, Topping topping = null) { return(topping == null); }
public bool Validate(string type, bool hasSugar, bool hasMilk, Topping topping = null) { return(_drinkValidatorFactory.Get(type).Validate(type, hasSugar, hasMilk, topping)); }
public Tuple <string, Drink> OrderDrink(string type, bool hasMilk, bool hasSugar, Topping topping = null) { var message = string.Empty; var drink = default(Drink); var drinkValidator = _drinkValidatorFactory.Get(type); if (drinkValidator == null) { message = _unableToProcess; return(new Tuple <string, Drink>(message, drink)); } if (!drinkValidator.Validate(type, hasSugar, hasMilk, topping)) { message = _unableToProcess; return(new Tuple <string, Drink>(message, drink)); } drink = _drinkFactory.Get(type, hasSugar, hasMilk, topping); if (drink == null) { message = _unableToProcess; return(new Tuple <string, Drink>(message, drink)); } message = drink.Prepare(); return(new Tuple <string, Drink>(message, drink)); }