Observable.java

// Package name
package observe;

// System imports
import java.util.ArrayList;

// Local imports

/**
 * Object to make classes observable to notify changes
 * Observer Design Pattern
 * @author ryan
 *
 */
public class Observable {
	// List of 'subscribers' to be notified of changes
	private ArrayList<Observer> observers;
	
	/**
	 * Initialize the list of observers
	 */
	public Observable() {
		observers = new ArrayList<Observer>();
	}
	
	/**
	 * Add the given observer to the list observers
	 * @param o - observer to be notified
	 */
	public void addObserver(Observer o) {
		observers.add(o);
	}
	
	/**
	 * Notify all observers that some event has taken place
	 * @param tag - Event identifier
	 * @param data - Associated data
	 */
	protected void notify(String tag, Object data) {
		for(Observer o : observers) {
			o.updated(this, tag, data);
		}
	}
}