使用場景: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對象