《Head First設計模式》 讀書筆記02 觀察者模式 Observer
觀察者模式
觀察者模式定義了對象之間的一對多依賴,這樣一來,當一個對象改變狀態時,它的所有依賴者都會收到通知並自動更新。
主題(被觀察者)通過一個共同的接口來更新觀察者。
有多個觀察者時,不可以依賴特定的通知次序。
觀察者模式提供了一種對象設計,讓主題和觀察者之間松耦合。改變主題或者觀察者其中一方,並不會影響另一方。
設計原則
為了交互對象之間的松耦合設計而努力。
松耦合的設計之所以能讓我們建立有彈性的OO系統,能夠應對變化,是因為對象之間的互相依賴降到了最低。
Java內置的觀察者模式
主題(被觀察者):擴展自java.util.Observable類。(因為是類,所以存在一定的局限性)。
觀察者:實現java.util.Observer接口。
通過調用Observable對象的addObserver()和deleteObserver()方法添加或者刪除觀察者。
被觀察者送出通知時,需要兩個步驟:
1.調用setChanged()方法,標記狀態已經改變的事實;
2.調用兩種notifyObservers()方法中的一個:
notifyObservers()或notifyObservers(Object arg):當通知時,后者的版本可以傳送任何的數據對象給每一個觀察者。
觀察者接收通知:
update(Observable o, Object arg)
主題本身是第一個參數,第二個參數為notifyObservers(Object arg)的數據對象,如果沒有則為空。
Java內置的Observer模式支持push和pull兩種數據傳遞方式:
push:由被觀察者把數據推給觀察者。
pull:觀察者從被觀察者中拉數據。
JDK中其他的觀察者模式
在JavaBeans和Swing中,也都實現了觀察者模式。
比如:http://www.cnblogs.com/mengdd/archive/2012/09/08/2676587.html