观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)。目标对象与观察者对象是一对多的关系。并却是单行依赖的关系。只有观察者依赖目标对象而目标对象不依赖观察者对象。目标对象是主动的而观察者对象是被动的。目标的状态发生变化时,所有依赖于它的观察者对象都得到通知并自动刷新。
观察者模型:
根据用代码实现通用的模板:
1.目标类的建立:
package com.jxufe.module.observer;
import java.util.ArrayList;
import java.util.List;
/**
* 目标对象,对观察者进行添加(注册)删除等操作
* @author jack
* @version 创建时间:2016年4月20日 下午12:44:16
*
*/
public class Subject {
/**
* 用来保存观察者
*/
private List<Observer> observers = new ArrayList<Observer>();
/**
* 添加一个观察者
*@param observer 具体的一个观察者
*/
public void attach(Observer observer){
observers.add(observer);
}
/**
* 删除一个观察者
*@param observer具体的一个观察者
*/
public void detach(Observer observer){
observers.remove(observer);
}
/**
* 更新观察者的信息
*/
public void notifyObserver(){
for(Observer observer:observers){
observer.update(this);
}
}
}
2.具体的目标类:
package com.jxufe.module.observer;
/**
* 具体的目标对象
* @author jack
* @version 创建时间:2016年4月20日 下午12:48:07
*
*/
public class ConcreteSubject extends Subject{
private String subjectInformation;//目标对象要更新的信息
public String getSubjectInformation() {
return subjectInformation;
}
/**
* 更改信息并通知所有的观察者
*@param subjectInformation
*/
public void setSubjectInformation(String subjectInformation) {
this.subjectInformation = subjectInformation;
this.notifyObserver();
}
}
3.观察者类:
package com.jxufe.module.observer;
/**
* 观察者的通用接口用来更新观察者信息
* @author jack
* @version 创建时间:2016年4月20日 下午12:49:56
*
*/
public interface Observer {
public void update(Subject subject);
}
4.具体的观察者类:
package com.jxufe.module.observer;
/**
* 具体的观察者
* @author 曾志鹏
* @version 创建时间:2016年4月20日 下午12:51:19
*
*/
public class ConcreteObserver implements Observer {
//观察者的信息
private String observerInformation;
/**
* 获取目标对象的最新的信息
*/
public void update(Subject subject) {
observerInformation =((ConcreteSubject) subject).getSubjectInformation();
}
public String getObserverInformation() {
return observerInformation;
}
public void setObserverInformation(String observerInformation) {
this.observerInformation = observerInformation;
}
}