用於事件監聽、通知發佈等,確保觀察者在不使用輪詢方式下及時收到相關消息和事件(不然需要另開一個線程不斷監聽,浪費資源)
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");
}
}