Задача 3B. Observer

Входной файл:Стандартный вход   Ограничение времени: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. Он не должен ничего выводить.


0.030s 0.008s 15