package helpers; import java.util.concurrent.CopyOnWriteArrayList; public class Observable<X> implements IObservable<X> { private final CopyOnWriteArrayList<IObserver<X>> obs = new CopyOnWriteArrayList<IObserver<X>>(); /* (non-Javadoc) * @see helpers.IObserver#addObserver(helpers.Observable.Observer) */ public void addObserver(IObserver<X> o) { obs.addIfAbsent(o); } /* (non-Javadoc) * @see helpers.IObserver#deleteObserver(helpers.Observable.Observer) */ public void deleteObserver(IObserver<X> o) { obs.remove(o); } /** * notifies all Observers that they have changed * and provided the given argument to the,, * * @param arg */ public void notifyObservers(X arg) { for (IObserver<X> ob:obs) { ob.update(this, arg); } } public void notifyObservers() { notifyObservers(null); } /** * Clears the observer list so that this object no longer has any observers. */ public void deleteObservers() { obs.clear(); } public static interface IObserver<X> { /** * This method is called whenever the observed object is changed. An * application calls an <tt>Observable</tt> object's * <code>notifyObservers</code> method to have all the object's * observers notified of the change. * * @param o the observable object. * @param arg an argument passed to the <code>notifyObservers</code> * method. */ void update(IObservable<X> o, X arg); } }