观察者模式
做项目中遇到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("观察者请刷新信息");