設計模式之觀察者模式

定義

Define a one-to-many dependency between objects so that when one object changes state,all its dependents are notified and updated automatically.(定義對象間一種一對多的依賴關係,使得每 當一個對象改變狀態,則全部依賴於它的對象都會獲得通知並被自動更新。)java

類圖

角色

  • Subject 被觀察者接口,定義添加觀察者,減小觀察者,通知觀察者的方法。
  • ConcreateSubject 被觀察者實現類,實現觀察者接口的方法,在適當業務場景代碼中調用notify來通知觀察者。

其中notify的代碼如:多線程

private List<Observer> obsList = new CopyOnWriteArrayList<>();
//通知全部觀察者
public void notify(){
	for(Observer o:this.obsList){
	o.update();
	}
}
  • Observer 觀察者接口,定義收到信息後的處理方法update。
  • ConcreateObserver 觀察者實現類,實現update方法。

高級應用

  • 這種在JDK中已經實現了一套如java.util.Observable實現類和java.util.Observer接口
  • 上述的例子中通知多個觀察者是採用的循環中順序執行的方法,在這種狀況下,一個觀察者若是效率很是慢,將影響其餘觀察者的處理進度,因此能夠採起隊列+多線程的方式進行處理。
  • 消息中的發佈訂閱就是觀察者模式的高級應用
相關文章
相關標籤/搜索