RecyclerView 中的观察者模式思考

RecyclerView 中的观察者模式,是始终只会存在一个观察者嘛?
我在查看 setAdapter() 的过程中,发现会先查看是否设置过 Adapter, 如果设置过会注销观察者,然后注册观察者。
如果只存在一个观察者的话,那么我想请问 RecyclerView 中使用观察者的意义是?

阅读 2.7k
1 个回答
概念错误

RecyclerView.setAdapter(Adapter)是运用的适配器模式;
Adapter.registerAdapterDataObserver(AdapterDataObserver)才是运用的观察者模式。

public abstract static class Adapter<VH extends ViewHolder> {
    private final AdapterDataObservable mObservable = new AdapterDataObservable();
    ...

    public void registerAdapterDataObserver(@NonNull AdapterDataObserver observer) {
            mObservable.registerObserver(observer);
    }

    ...
}

static class AdapterDataObservable extends Observable<AdapterDataObserver> {
    ...
}

public abstract class Observable<T> {
    /**
     * The list of observers.  An observer can be in the list at most
     * once and will never be null.
     */
    protected final ArrayList<T> mObservers = new ArrayList<T>();

    ...

    public void registerObserver(T observer) {
        if (observer == null) {
            throw new IllegalArgumentException("The observer is null.");
        }
        synchronized(mObservers) {
            if (mObservers.contains(observer)) {
                throw new IllegalStateException("Observer " + observer + " is already registered.");
            }
            mObservers.add(observer);
        }
    }

    ...
}
推荐问题