定义:定义对象间一对多的关系,当一个对象发生改变时候,所有和它相关联的其他对象都得到该对象更新的消息,从而做出对应的处理
然而在android 系统中存在一个系统级别的Observable类 下面我们来定义一个被观察者
public class MyObserver extends Observable { private static MyObserver ourInstance = null; public static MyObserver getInstance() { if (ourInstance==null){ synchronized (MyObserver.class){ if (ourInstance==null){ ourInstance=new MyObserver(); } } } return ourInstance; } private MyObserver() { } public void postMessage(String message){ } }
我们将这个被观察者设计成单利模式 为了让整个系统只存在一个消息的发送者
接下里我们设计一个观察者 而正常开发过程中我们会有多个观察者 所以我们不妨将这个观察者定义到一个基类里面
/**
* Created by zs on 2016/11/12.
*/
public class BaseActivity extends Activity implements Observer{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(this instanceof Observer){
//将要接收消息的学生添加
MyObserver.getInstance().addObserver(this);
}
}
//接受到消息的回调方法,就是学生接受到消息后做出的反映
@Override
public void update(Observable observable, Object data) {
}
}
当我们的被观察者数据发生变化的时候 我们需要发送数据 通知被观察者数据发生变化
MyObserver.getInstance().postMessage("111111");
这样在我们基类设置的update方法中 就会收到被观察者数据变化的通知 进而更新ui效果操作
@Override public void update(Observable o, Object arg) { super.update(o, arg); if (arg instanceof String) { final String message = (String) arg; Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show(); } }
这样一个简单的观察者模式算是结束了