定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時, 所有依賴於它的物件都得到通知並被自動更新。
public
abstract
class
subject
/*** 刪除觀察者物件
*@param observer 觀察者物件
*/public
void
detach(observer observer)
/*** 通知所有註冊的觀察者物件
*/public
void
nodifyobservers(string newstate)}}
public
class
concretesubject
extends
subject
public
void
change(string newstate)
}
public
inte***ce
observer
public
class
concreteobserver
implements
observer
}
public
class
client
}
clojure有add-watch函式可實現此模式.
(def
a (atom
{}))
(defn
func-a
(println
"func-a invoke"))
(defn
func-b
(println
"func-b invoke"))
(add-watch
a :watchera
(fn [key atom old-state new-state]
(func-a)))
(add-watch
a :watcherb
(fn [key atom old-state new-state]
(func-b)))
(reset!
a )
15 設計模式 觀察者模式
觀察者模式,即需要有觀察者主題subject,還有觀察者observe,以及通知者notify.我們可以動態的新增觀察者,以及批量通知觀察者。這樣可以達到觀察和主題之間的解耦。在springboot原始碼裡面可以明顯看到觀察者模式的運用了,有興趣可以了解一下。觀察者模式 如下。抽象主題 public...
15 觀察者模式(Observer)
包括這個模式在內的接下來的四個模式,都是類和類之間的關係,不涉及到繼承,學的時候應該 記得歸納,記得本文最開始的那個圖。觀察者模式很好理解,類似於郵件訂閱和rss訂閱,當我們瀏覽一些部落格或wiki時,經常會看到rss圖示,就這的意思是,當你訂閱了該文章,如果後續有更新,會及時通知你。其實,簡單來講...
觀察者模式
觀察者模式 observer 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...