/* * */ package vroom.common.utilities; /** * <code>ProxyObserver</code> is a proxy class that allows reference separation between an {@link IObserver observer} * and {@link IObservable observable}. * <p> * It is in particular useful when {@link IObserver observers} cannot keep track of all the {@link IObservable} they * monitor, leading to memory leaks * </p> * <p> * Creation date: Sep 6, 2010 - 6:42:55 PM * * @author Victor Pillac, <a href="http://uniandes.edu.co">Universidad de Los Andes</a>-<a * href="http://copa.uniandes.edu.co">Copa</a> <a href="http://www.emn.fr">Ecole des Mines de Nantes</a>-<a * href="http://www.irccyn.ec-nantes.fr/irccyn/d/en/equipes/Slp">SLP</a> * @version 1.0 */ public class ObserverProxy implements IObserver { private IObserver mParentObserver; /** * Creates a new <code>ProxyObserver</code> * * @param parentObserver */ public ObserverProxy(IObserver parentObserver) { if (parentObserver == null) { throw new IllegalArgumentException("Argument parentObserver cannot be null"); } mParentObserver = parentObserver; } /* (non-Javadoc) * @see vroom.common.utilities.IObserver#update(vroom.common.utilities.IObservable, vroom.common.utilities.Update) */ @Override public void update(IObservable source, Update update) { if (mParentObserver != null) { mParentObserver.update(source, update); } } /** * Detach the parent observer from all the {@link IObservable observable} objects in which it was referenced */ public void detach() { mParentObserver = null; } /** * Test if this proxy is still attached * * @return <code>true</code> if this proxy has been detached from its parent */ public boolean isDetached() { return mParentObserver == null; } }