Exemple #1
0
 protected Department()
 {
     contractor = CreateContractor();
     deliverer  = CreateDeliverer();
     Animals    = CreateAnimals();
     Houses     = CreateHouses();
     //изначально в отделе максимальное к-во товаров
     Animals.SetMax();
     Houses.SetMax();
     contractor.ContractionCompleted += (purchase, contractor) => ContractionFinished?.Invoke(purchase, contractor);
     deliverer.Delivered             += (purchase, deliverer) => PurchaseDelivered?.Invoke(purchase, deliverer);
 }
Exemple #2
0
        public event Action FinishWork;                                 //работа магазина окончена

        public PetShop()
        {
            PurchaseQueue    = new Queue <Purchase>();
            PurchaseCreation = new PurchaseQueueCreation(PurchaseQueue);
            DepartmentChain  = CreateDepartments();
            Cart             = new ShoppingCart(DepartmentChain, PurchaseQueue);
            //подключаем обработчики событий добавления покупки в корзину (откуда она пойдет в отделы),
            //откладывания покупки (если отдел занят) и окончания работы магазина
            Cart.PurchaseInProcess += purchase => PurchaseToDep?.Invoke(purchase);
            Cart.PostponePurchase  += purchase => PostponePurchase?.Invoke(purchase);
            Cart.FinishWork        += () => FinishWork?.Invoke();
            //подключаем обработчики событий добавления/откладывания (если доставщик занят)/изменений на складе/доставки покупки для отделов
            PurchaseCreation.AddPurchase += purchase => NewPurchase?.Invoke(purchase);
            DepartmentChain.AddStockChanges(department => StockChanges?.Invoke(department));
            DepartmentChain.AddContractionAction((purchase, contractor) => ContractionFinished?.Invoke(purchase, contractor));
            DepartmentChain.AddDeliveryAtion((purchase, deliverer) => DeliveryFinished?.Invoke(purchase, deliverer));
        }