Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andreikastsiuk/4ce7a12e53106319907dd6d4b2156804 to your computer and use it in GitHub Desktop.
Save andreikastsiuk/4ce7a12e53106319907dd6d4b2156804 to your computer and use it in GitHub Desktop.
Base class for Java Observable
public abstract class BaseObservable<LISTENER_CLASS> {
private final Object MONITOR = new Object();
private final Set<LISTENER_CLASS> mListeners = new HashSet<>();
public void registerListener(LISTENER_CLASS listener) {
synchronized (MONITOR) {
boolean hadNoListeners = mListeners.size() == 0;
mListeners.add(listener);
if (hadNoListeners && mListeners.size() == 1) {
onFirstListenerRegistered();
}
}
}
public void unregisterListener(LISTENER_CLASS listener) {
synchronized (MONITOR) {
boolean hadOneListener = mListeners.size() == 1;
mListeners.remove(listener);
if (hadOneListener && mListeners.size() == 0) {
onLastListenerUnregistered();
}
}
}
protected Set<LISTENER_CLASS> getListeners() {
synchronized (MONITOR) {
return Collections.unmodifiableSet(new HashSet<>(mListeners));
}
}
protected void onFirstListenerRegistered() {
}
protected void onLastListenerUnregistered() {
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment