2.1.5 觀察者模式

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

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");
     }
}

JDK

java.util.Observable類功能對應主題接口(被觀察者繼承),java.util.Observer接口對應觀察者接口

發佈了42 篇原創文章 · 獲贊 10 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章