觀察者設計模式

使用場景:java

  • 作監聽,購票後發短信、記日誌、作發佈-訂閱、贈券

################################大數據

觀察者模式是對象的行爲模式spa

  • 又叫發佈-訂閱(Publish/Subscribe)模式、
  • 模型-視圖(Model/View)模式
  • 源-監聽器(Source/Listener)模式或從屬者(Dependents)模式

推模型和拉模型

推模型3d

  • 主題對象向觀察者推送主題的詳細信息,無論觀察者是否須要,推送的信息一般是主題對象的所有或部分數據

拉模型日誌

  • 主題對象在通知觀察者的時候,只傳遞少許信息
  • 若是觀察者須要更具體的信息,由觀察者主動到主題對象中獲取,至關因而觀察者從主題對象中拉數據

兩種模式的比較

  • 推模型是假定主題對象知道觀察者須要的數據;而拉模型是主題對象不知道觀察者具體須要什麼數據,沒有辦法的狀況下,乾脆把自身傳遞給觀察者,讓觀察者本身去按須要取值
  • 推模型可能會使得觀察者對象難以複用,由於觀察者的update()方法是按須要定義的參數,可能沒法兼顧沒有考慮到的使用狀況;這就意味着出現新狀況的時候,就可能提供新的update()方法,或者是乾脆從新實現觀察者;而拉模型就不會形成這樣的狀況,由於拉模型下,update()方法的參數是主題對象自己,這基本上是主題對象能傳遞的最大數據集合了,基本上能夠適應各類狀況的須要

JAVA提供的對觀察者模式的支持

  • 在JAVA語言的java.util庫裏面,提供了一個Observable類以及一個Observer接口,構成JAVA語言對觀察者模式的支持
  • 這個類表明一個被觀察者對象,有時稱之爲主題對象。一個被觀察者對象能夠有數個觀察者對象,每一個觀察者對象都是實現Observer接口的對象
  • 使用時能夠分別擴展,Observable類以及Observer接口,建立Watcher對象和 Watched對象
相關文章
相關標籤/搜索