定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。
/**
* 程序员是观察者
* /
public class Coder implements Observer{
public String name;
public cODER(String aName){
name = aName;
}
@Override
public void update(Observvable o,Object arg){
System.out.println("Hi,"+name+",DevTechFrontier更新啦,内容:"+arg);
}
@Override
public String toString(){
return "码农:"+name;
}
}
/**
* DevTechFrontier 即开发技术前线,这个网站是被观察者角色,
* 当它有更新时所有的观察者(这里是程序员)都会接到相应的通知
* /
public class DeTechFrontier extends Observable{
public void postNewPublication(String content){
//标识状态或者内容发生改变
setChanged();
//通知所有观察者
notifyObservers(content);
}
}
//测试代码
public class Test{
public static void main(String[] args){
//被观察的角色
DevTechFrontier DevTechFrontier = new DevTechFrontier();
//观察者
Coder mrsimple = new Coder("mr.simple");
Coder coder1 = new Coder("coder-1");
Coder coder2 = new Coder("coder-2");
Coder coder3 = new Coder("coder-3");
//将观察者注册到可观察对象的观察者列表中
DevTechFrontier.addObserver(mrsimple);
DevTechFrontier.addObserver(coder1);
DevTechFrontier.addObserver(coder2);
DevTechFrontier.addObserver(coder3);
//发布消息
DevTechFrontier.postNewPublication("新的一期开发技术前线周报发布啦!");
}
}
在java中消息的通知默认是顺序执行,一个观察者卡顿,会影响整体的执行效率,在这种情况下,一般考虑采用异步的方式。