用于事件监听、通知发布等,确保观察者在不使用轮询方式下及时收到相关消息和事件(不然需要另开一个线程不断监听,浪费资源)
UML结构图见Page33
主题接口依赖于观察者接口
具体主题,实现主题接口,维护一个观察者列表
观察者接口,定义观察者的方法,依赖状态改变时由主题接口调用
具体观察者,实现观察者接口
观察者接口
具体主题
具体观察者
UML结构图见Page33
主题接口依赖于观察者接口
主要角色:
主题接口,被观察的对象具体主题,实现主题接口,维护一个观察者列表
观察者接口,定义观察者的方法,依赖状态改变时由主题接口调用
具体观察者,实现观察者接口
Example:
主题接口
public interface SubInterface{
void addObserver(ObserverInterface oi); //添加观察者
void delObserver(ObserverInterface oi); //删除观察者
void inform(); //通知观察者
}
观察者接口
public interface ObserverInterface{
void update(Event e); //更新观察者
}
具体主题
public class ConcreteSubject implements SubInterface{
Vector<ObserverInterface> observers = new Vector<ObserverInterface>();
public void addObserver(ObserverInterface oi){
observers.addElement(oi);
}
public void delObserver(ObserverInterface oi){
observers.removeElement(oi);
}
public void inform(){
Event e = new Event();
for(ObserverInterface oi : observers)
oi.update(e);
}
}
具体观察者
public class ConcreteObserver implements ObserverInterface{
public void update(Event e){
System.out.println("observer receives information");
}
}