1. Внутри StatisticStorage создай метод void put(EventDataRow data).
2. Чтобы методом put(EventDataRow data) добавить объект data в данные карты, нужен тип события - EventType.
Будет правильно, если событие будет хранить в себе свой тип. Поэтому:
2.1. В интерфейс EventDataRow добавь метод EventType getType()
2.2. Реализуй этот метод в каждом классе-событии: CookedOrderEventDataRow, NoAvailableVideoEventDataRow, VideoSelectedEventDataRow
3. Сделай так, чтобы к методу void put(EventDataRow data) нельзя было получить доступ за пределами класса StatisticManager.
Воспользуйся особенностями вложенных классов.
Теперь остается расставить вызовы StatisticManager в те места, которые генерируют события.
4. Зарегистрируй событие для повара во время приготовления еды.
Добавь геттер для поля dishes в класс Order, используй его при создании события.
5. Зарегистрируй событие "видео выбрано" перед отображением рекламы пользователю.
6. Метод register с одним параметром типа EventDataRow должен регистрировать полученное событие в statisticStorage.
Требования:
В интерфейсе EventDataRow должен быть объявлен метод EventType getType().
В классах поддерживающих интерфейс EventDataRow должен быть корректно реализован метод getType().
Метод put в классе StatisticStorage должен быть реализован в соответствии с условием задачи.
Метод register класса StatisticManager с одним параметром типа EventDataRow должен регистрировать полученное событие в statisticStorage.
Повар во время приготовления еды должен генерировать соответствующее событие.
Перед отображением списка видео должно быть зарегистрировано событие "видео выбрано".
package com.javarush.task.task27.task2712;
import com.javarush.task.task27.task2712.kitchen.Cook;
import com.javarush.task.task27.task2712.kitchen.Waiter;
public class Restaurant {
public static void main(String[] args) {
Tablet tablet = new Tablet(5);
Cook cook = new Cook("Amigo");
Waiter waiter = new Waiter();
tablet.addObserver(cook);
tablet.createOrder();
cook.addObserver(waiter);
}
}
0
Комментарии (5)
популярные
новые
старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Попробуй так:
AdvertisementManager advertisementManager = new AdvertisementManager(order.getTotalCookingTime() * 60);
try {
advertisementManager.processVideos(); //вызов просмотра видео
} catch (NoVideoAvailableException e) {
logger.log(Level.INFO, "No video is available for the order " + order);
}
Метод processVideos() вызови сразу после проверки(!order.isEmpty()). Почему у тебя 2 блока try, достаточно одного. А исключение, которое броcает метод processVideos(), лови в отдельном catch.
public Order createOrder() {
Order order = null;
try {
order = new Order(this);
if (!order.isEmpty()) {
AdvertisementManager manager = new AdvertisementManager(order.getTotalCookingTime() * 60);
manager.processVideos();
setChanged();
notifyObservers(order);
}
} catch (IOException e){
logger.log(Level.SEVERE, "Console is unavailable.");
order = null;
} catch (NoVideoAvailableException e) {
logger.log(Level.INFO, "No video is available for the order " + order);
}
return order;
}
public int getNumber() {
return number;
}
Это мой код, и у меня прокатило.)
не проходит, не знаю что не так, я весь код поменял, каждый класс, скопировал у тех, кто уже сделал, но не проходит, не знаю что не так, придется все заново сделать. спасибо за помощь