package test;
import java.util.Observable;
import java.util.Observer;
/**
* 观察者 模式
*/
public class TestObserver {
public static void main(String[] args) {
//观察者
User nzh = new User("nzh");
User xp = new User("小平");
//被观察者
Weibo weibo = new Weibo();
//一定要注册
weibo.addObserver(xp);
weibo.addObserver(nzh);
weibo.pushNewInfo("发干货了!!");
}
}
/**
* 观察者 实现Observer 接口
*/
class User implements Observer{
String id ;
public User(String id){
this.id = id;
}
@Override
public void update(Observable o, Object arg) {
System.out.println(id+":用户收到更新-发送者:"+o.toString()+"发送内容:"+arg);
}
}
/**
* 被观察者 继承 Observable类,并 实现推送更新的方法
*/
class Weibo extends Observable{
public void pushNewInfo(String content ){
// 标识状态或者内容发生改变
setChanged();
// 通知所有观察者
notifyObservers(content);
}
@Override
public String toString() {
return "Weibo";
}
}
应用例子: 实现app的摇一摇截图功能
分析:由于在每个activity页面都有可能发生截图,这时可以把所有activity组件作为观察者,将重力感应组件
作为被观察者,当重力感应满足条件时(监听到摇一摇),被观察者 通知 观察者,观察者开始截屏。
观察者 : Activity 组件(对象)
被观察者:重力感应组件(对象)