拥有收藏监听器的好方法?
2022-09-02 13:20:59
有没有比将侦听器包装在实现观察者模式的类中更好的方法来在java集合上设置侦听器?
有没有比将侦听器包装在实现观察者模式的类中更好的方法来在java集合上设置侦听器?
您可以使用 Guava 中的 ForwardingSet、ForwardingList 等来装饰具有所需行为的特定实例。
这是我自己的实现,只使用普通的JDK API:
// create an abstract class that implements this interface with blank implementations
// that way, annonymous subclasses can observe only the events they care about
public interface CollectionObserver<E> {
public void beforeAdd(E o);
public void afterAdd(E o);
// other events to be observed ...
}
// this method would go in a utility class
public static <E> Collection<E> observedCollection(
final Collection<E> collection, final CollectionObserver<E> observer) {
return new Collection<E>() {
public boolean add(final E o) {
observer.beforeAdd(o);
boolean result = collection.add(o);
observer.afterAdd(o);
return result;
}
// ... generate rest of delegate methods in Eclipse
};
}