Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
 public bool Validate(string type, bool hasSugar, bool hasMilk, Topping topping = null)
 {
     return(topping == null);
 }
Exemplo n.º 3
0
 public bool Validate(string type, bool hasSugar, bool hasMilk, Topping topping = null)
 {
     return(_drinkValidatorFactory.Get(type).Validate(type, hasSugar, hasMilk, topping));
 }
Exemplo n.º 4
0
        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));
        }