Входной файл: | Стандартный вход | Ограничение времени: | 1 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 512 Мб |
Дан интерфейс Subscriber
, описывающий подписку на событие:
public interface Subscriber {
void notified(int topic, String message);
}
Напишите класс Notifier
, реализующий шаблон проектирования Observer.
public class Notifier
{
public void register(int topic, Subscriber s) { ... }
public void unregister(int topic, Subscriber s) { ... }
public void notify(int topic, String message) { ... }
}
Функция register
должна подписывать обработчик на события определённой темы.
Функция unregister
должна отменять подписку обработчика на события определённой темы.
Функция notify
должна вызывать функции notified
у всех обработчиков указанной
темы в порядке, соответствующем порядку подписки.
Повторная подписка того же самого обработчика на одну и ту же тему должна перемещать его в конец очереди, определяющей порядок обработки. Отписка не подписанного обработчика должна ничего не делать.
Код решения должен содержать только класс Notifier
. Он не должен ничего выводить.