47 lines
881 B
Java
47 lines
881 B
Java
|
package com.dougkeen.util;
|
||
|
|
||
|
import java.util.WeakHashMap;
|
||
|
|
||
|
import org.apache.commons.lang3.ObjectUtils;
|
||
|
|
||
|
public class Observable<T> {
|
||
|
private T value;
|
||
|
private WeakHashMap<Observer<T>, Boolean> listeners = new WeakHashMap<Observer<T>, 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<T> observer) {
|
||
|
listeners.put(observer, true);
|
||
|
}
|
||
|
|
||
|
public void unregisterObserver(Observer<T> observer) {
|
||
|
listeners.remove(observer);
|
||
|
}
|
||
|
|
||
|
protected void notifyOfChange(T value) {
|
||
|
for (Observer<T> listener : listeners.keySet()) {
|
||
|
if (listener != null) {
|
||
|
listener.onUpdate(value);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|