package observer;

import java.util.HashSet;
import java.util.Set;

public class Observable<E> {
   
   private Set<Observer<E>> observers = new HashSet<Observer<E>>();
   boolean changed;
   
   void addObserver(Observer<E> obs) {
      observers.add(obs);
   }

   void removeObserver(Observer<E> obs) {
      observers.remove(obs);
   }

   void notifyObservers(E event) {
      if (!changed) return;
      changed = false;
      for (Observer<E> obs : observers) {
         obs.update(event);
      }
   }
}
