package com.dougkeen.util; import java.util.WeakHashMap; import org.apache.commons.lang3.ObjectUtils; public class Observable { private T value; private WeakHashMap, Boolean> listeners = new WeakHashMap, Boolean>(); public Observable() { super(); } public Observable(T value) { super(); this.value = value; } public T getValue() { return value; } public void setValue(T value) { if (!ObjectUtils.equals(this.value, value)) { this.value = value; notifyOfChange(value); } } public void registerObserver(Observer observer) { listeners.put(observer, true); } public void unregisterObserver(Observer observer) { listeners.remove(observer); } public void unregisterAllObservers() { listeners.clear(); } protected void notifyOfChange(T value) { for (Observer listener : listeners.keySet()) { if (listener != null) { listener.onUpdate(value); } } } }