Android Observer观察者模式,rxandroid,Android响应模式

主要三个类

1、

public interface Observer {
    void update(int id,String param);
}

2、

public interface Subject {

    /**
     * 注册一个观察者
     */
    void addObserver(Observer observer);

    /**
     * 删除一个观察者
     *
     * @return 是否删除成功
     */
    boolean removeObserver(Observer observer);

    /**
     * 通知所有的观察者
     *
     * @param id 对应观察者的id
     */
    void notifyObserver(int id,String param);

}

3、

public class TestObServernotice implements Subject {

    private static Subject subject;
    private List<Observer> observers = new ArrayList<>();

    private TestObServernotice() {
        // TODO Auto-generated constructor stub
    }

    public static Subject getInstance() {
        if (null == subject) {
            synchronized (TestObServernotice.class) {
                if (null == subject)
                    subject = new TestObServernotice();
            }
        }
        return subject;
    }

    @Override
    public void addObserver(Observer observer) {
        // TODO Auto-generated method stub
        observers.add(observer);
    }

    @Override
    public boolean removeObserver(Observer observer) {
        // TODO Auto-generated method stub
        return observers.remove(observer);
    }

    @Override
    public void notifyObserver(int id,String param) {
        // TODO Auto-generated method stub
        for (Observer observer : observers) {
            observer.update(id,param);
        }
    }
}

观察者中注册Observer,如MainActivity中注册

private Observer deleteObserver = new Observer() {
    @Override
    public void update(int id,String param) {
        tomapte.setText("sssssymd"+param);//dosomething
    }
};
TestObServernotice.getInstance().addObserver(deleteObserver);

同时注意删除观察者

@Override
protected void onDestroy() {
    super.onDestroy();
    TestObServernotice.getInstance().removeObserver(deleteObserver);
    deleteObserver = null;
    Log.v("lgq", "......11..onDestroy....");
}

调用,通知观察者,主要在receiver中调用,fragment,activity都可以调用,跨界面刷新数据

TestObServernotice.getInstance().notifyObserver(0,bundle.getString("cn.jpush.android.ALERT"));


猜你喜欢

转载自blog.csdn.net/meixi_android/article/details/81016359