观察者模式

做项目中遇到Fragment跳转到Activity后,activity中的数据要传递回fragment中,而该fragment依赖的activity在不同的model中,此时用到了观察者模式!

第一步:观察者接口

public interface ObserverListener {
    /**
     * 刷新操作
     * @param content content
     */
    void observerUpData(String content);
}

第二步:被观察者接口

public interface SubjectListener {
    /**
     * 添加观察者
     * @param observerListener observerListener
     */
    void add(ObserverListener observerListener);
    /**
     * 观察者传递数据
     * @param content content
     */
    void notifyObserver(String content);
    /**
     * 移除观察者
     * @param observerListener observerListener
     */
    void remove(ObserverListener observerListener);

第三步:观察者管理类

public class ObserverManager implements SubjectListener {
    private static ObserverManager observerManager;
    /**
     * 观察者接口集合
     */
    private List<ObserverListener> list = new ArrayList<>();

    /**
     * 单例
     */
    public static ObserverManager getInstance() {
        if (null == observerManager) {
            synchronized (ObserverManager.class) {
                if (null == observerManager) {
                    observerManager = new ObserverManager();
                }
            }
        }
        return observerManager;
    }

    /**
     * 加入监听队列
      */
    @Override
    public void add(ObserverListener observerListener) {
        list.add(observerListener);
    }

    /**
     * 通知观察者刷新数据
     */
    @Override
    public void notifyObserver(String content) {
        for (ObserverListener observerListener : list) {
            observerListener.observerUpData(content);
        }
    }

    /**
     * 监听队列中移除
     */
    @Override
    public void remove(ObserverListener observerListener) {
        if (list.contains(observerListener)) {
            list.remove(observerListener);
        }
    }
}

 

第四步:fragment实现observerListener

@Override
    public void observerUpData(String content) {
        tvText.setText(content);
    }

第五步:activity中在需要处调用代码

ObserverManager.getInstance().notifyObserver("观察者请刷新信息");

 

posted on 2019-02-20 19:50  HarperSun  阅读(116)  评论(0编辑  收藏  举报

导航