package de.dhbw.tinf12.pattern.observer;
import java.util.LinkedList;
import java.util.List;
public abstract class RadioactiveElement {
private List<DecayListener> listeners;
public RadioactiveElement() {
super();
this.listeners = new LinkedList<>();
}
protected void notifyListeners() {
for (final DecayListener each : new LinkedList<>(listeners)) {
notify(each);
}
}
protected void notify(final DecayListener listener) {
//createNotifierFor(listener).run();
createNotifierFor(listener).start();
}
protected Thread createNotifierFor(final DecayListener listener) {
return new Thread() {
public void run() {
try {
listener.notifyOfDecay();
} catch (Exception e) {
e.printStackTrace();
RadioactiveElement.this.listeners.remove(listener);
}
}
};
}
public void addDecayListener(DecayListener l) {
this.listeners.add(l);
}
public void removeDecayListener(DecayListener l) {
this.listeners.remove(l);
}
}