package ru.rsdn.patterns.behavioral.observer.problems.init.implicit;

import java.util.Collection;

import ru.rsdn.patterns.behavioral.observer.ISubscriber;
import ru.rsdn.patterns.behavioral.observer.AbstractPublisher;

/**
 * Риск безопасности инициализации из-за неявной потери this при опубликовании
 * подписчика, являющегося экземпляром анонимного класса
 */
public abstract class UnsafeImplicitInitSubscriber {
	/**
	 * Конструктор
	 * @param publisher издатель
	 */
	public UnsafeImplicitInitSubscriber(
			AbstractPublisher<Collection<ISubscriber>> publisher) {
		publisher.subscribe(new ISubscriber() {
			public void eventHappen() {
				getEventHistory().add(System.currentTimeMillis());
			}
		});
	}

	/**
	 * @return история событий
	 */
	protected abstract Collection<Long> getEventHistory();
}
