觀察者模式定義了對象之間的一對多依賴,使得當一個對象改變狀态時,它的所有依賴者都會收到通知并自動更新。觀察者模式又叫釋出/訂閱模式。
抽象主題(subject):它把所有觀察者對象的引用儲存到一個清單裡,每個主題都可以有任何數量的觀察者。抽象主題提供一個接口,可以增加和删除觀察者對象。
具體主題(concretesubject):将有關狀态存入具體觀察者對象;在具體主題内部狀态改變時,給所有登記過的觀察者發出通知。
抽象觀察者(observer):為所有的具體觀察者定義一個接口,在得到主題通知時更新自己。
具體觀察者(concreteobserver):實作抽象觀察者角色所要求的更新接口,以便使本身的狀态與主題狀态協調。
以獵頭-求職者為例。獵頭是主題,求職者是觀察者。
subject 接口
observer 接口
headhunter 類實作 subject 接口
jobseeker 類實作 observer 接口
測試
輸出
觀察者模式使主題和觀察者之間松耦合,松耦合的設計能夠讓我們建立有彈性的oo系統,能夠應對變化,因為對象直接的互相依賴降到了最低。
上面的例子是觀察者模式的“推”模式,還有一種“拉”模式。
java 的 java.util 庫裡面,提供了一個 observable 類以及一個 observer 接口,構成 java 語言對觀察者模式的支援。