Exemple #1
0
        public static int GetCookingTime(ProductType productType)
        {
            lock (_locker)
            {
                if (_instances.TryGetValue(productType, out AbstractProduct instance))
                {
                    return(instance.CookingTimeInSeconds);
                }

                instance = AbstractProductCreator.GetCreator(productType).Create();
                _instances.Add(productType, instance);

                return(instance.CookingTimeInSeconds);
            }
        }
Exemple #2
0
        private async Task <AbstractCompletedOrder> PreparedOrder(AbstractOrder order)
        {
            int allCoocingTime = order.ProductTypes.Sum(productType => ProductsCookingTimeInformator.GetCookingTime(productType));

            var cookingEmulator = Task.Delay(TimeSpan.FromSeconds(allCoocingTime)); // Моделирует приготовление заказа
            LinkedList <AbstractProduct> completedProducts = new LinkedList <AbstractProduct>();

            foreach (var productType in order.ProductTypes)
            {
                completedProducts.AddLast(AbstractProductCreator.GetCreator(productType).Create());
            }

            AbstractCompletedOrder completedOrder = new CompletedOrder(order.Number, completedProducts);
            await cookingEmulator;

            return(completedOrder);
        }