publish ⇔ subscribe
public final class Observer<T> { public interface Subscriber<T> { void onSubscribe(T data); } private final HashMap<String, Subscriber<T>> manager = new HashMap<>(); public final void subscribe(Subscriber<T> subscriber) { if(subscriber == null) return; manager.put(subscriber.getClass().getName(), subscriber); } public final void publish(T data) { if(data == null) return; for(Subscriber<T> listener : manager.values()) { listener.onSubscribe(data); } } }