|
|
@@ -1,5 +1,6 @@
|
|
|
package org.leumasjaffe.observer;
|
|
|
|
|
|
+import java.lang.ref.WeakReference;
|
|
|
import java.util.UUID;
|
|
|
|
|
|
import com.google.common.collect.LinkedListMultimap;
|
|
|
@@ -16,14 +17,14 @@ public class ObserverDispatch {
|
|
|
@AllArgsConstructor
|
|
|
@FieldDefaults(level=AccessLevel.PRIVATE, makeFinal=true)
|
|
|
private static class Pair {
|
|
|
- Object obj;
|
|
|
+ WeakReference<Object> obj;
|
|
|
Subscriber sub;
|
|
|
}
|
|
|
|
|
|
Multimap<UUID, Pair> observers = LinkedListMultimap.create();
|
|
|
|
|
|
public void subscribe(Observable target, Object src, Subscriber sub) {
|
|
|
- observers.put(target.observableId, new Pair(src, sub));
|
|
|
+ observers.put(target.observableId, new Pair(new WeakReference<>(src), sub));
|
|
|
}
|
|
|
|
|
|
public void unsubscribeAll(Object src) {
|
|
|
@@ -31,7 +32,7 @@ public class ObserverDispatch {
|
|
|
}
|
|
|
|
|
|
public void notifySubscribers(Observable target, Object src) {
|
|
|
- observers.get(target.observableId).stream().filter( p -> p.obj != src ).forEach(
|
|
|
+ observers.get(target.observableId).stream().filter( p -> p.obj.get() != src ).forEach(
|
|
|
p -> p.sub.notifyUpdate() );
|
|
|
}
|
|
|
}
|