語言與模式 15觀察者模式

2021-06-29 01:24:41 字數 1219 閱讀 1488

定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時, 所有依賴於它的物件都得到通知並被自動更新。

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 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...