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); }
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)); }