java - 观察者模式
设计模式,观察者模式,java2016-07-13
Subject: 目标对象,通常具有以下功能
Observer: 定义观察者的借口,提供目标通知时对应的更新方法,这个更新方法进行相应的业务处理,可以在这个方法里面回调目标对象,翼获取目标对象的数据。
public class Subject{
/**
*用来保存注册的观察者对象
*/
private List<Observer> observers = new ArrayList<Observer>();
/**
*注册观察者对象
*/
public void attach(Observer observer){
observers.add(observer);
}
/**
*删除观察者对象
*/
public void detach(Observer observer){
observers.remove(observer);
}
/**
*通知所有注册的观察者对象
*/
protected void notifyObservers(){
for(Observer observer : observers){
observer.update(this);
}
}
}
/**
* 具体的目标对象,负责把有关状态存入到相应的观察者对象
* 并在自己状态发生改变的时候,通知各个观察者
*/
public class ConcreteSubject extends Subject{
/**
* 示意,目标对象的状态
*/
private String subjectState'
public String getSubjectState(){
return subjectState;
}
public void setSubjectState(String subjectState){
this.subjectState = subjectState;
//状态发生了改变,通知哥哥观察者
this.notifyObservers();
}
}
/**
*观察者接口,定义一个更新的接口给那些在目标发生改变的时候被 *通知的对象
*/
public interface Observer{
public void update(Subject subject);
}
/**
*具体观察者对象,实现更新的方法,使自身的状态和目标的状态保持一
*致
*/
public class ConcreteObserver implements Observer{
private String observerState;
public void update(Subject subject){
//具体更新的实现
//这里可能需要更新观察者的状态,使其与目标状态一致
observerState = ((ConcreteSubject)subject).getSubjectState();
}
}