观察者模式:定义了对象之间的一对多依赖,当一个对象改变状态时,所有依赖者都会收到通知并更新。
//定义被观察者常用接口
public interface Subject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();
}
//定义观察者更新接口
public interface Observer {
public void update(int x,int y);
}
//实现一个被观察者
public class Publisher implements Subject{
private ArrayList observers; //维护一个观察者对象组
private int x;
private int y;
public Publisher(){
observers=new ArrayList();
}
public void registerObserver(Observer o){
observers.add(o);
}
public void removeObserver(Observer o){
int i=observers.indexOf(o);
if (i>=0){
observers.remove(i);
}
}
public void notifyObservers(){
for(int i=0,size=observers.size();i<size;i++){
Observer observer=(Observer)observers.get(i);
observer.update(x,y);
}
}
public void setData(int x,int y){
this.x=x;
this.y=y;
notifyObservers(); //有数据更新时“推送”给每个观察者
}
}
//实现一个观察者
public class UseObserver implements Observer{
private int ux;
private int uy;
private Subject Publisher;
public UseObserver(Subject sj){
this.Publisher=sj; //用于记录被观察者,可以不需要
sj.registerObserver(this);
}
public void update(int x,int y){
this.ux=x;
this.uy=y;
}
}