觀察者模式簡介:
定義:定義對象間的一對多的依賴關係,當一個對象的狀態改變時,所有依賴於它的對象都得到通知並被自動更新。
原理:由四部分組成抽象目標類,具體目標類,抽象觀察者類,具體觀察者類
Subject .java
ConcreteSubject .java
Observer.java
ConcreteObserver.java
使用java.util.Observer接口和java.util.Observable類實現觀察者模式:
觀察者實現Observer接口,並重寫其中的update方法,供被觀察者狀態改變時調用。
被觀察者繼承Observable類,在Observable類中有增加,刪除觀察者類的方法,還有通知所有觀察者都update的方法。狀態改變時,先setChanged,再notifyObservers。
Observer接口源碼:
Observable類源碼:
使用時機:
1. 當一個對象的改變需要同時改變其他對象,而且它不知道具體有多少對象有待改變時, 應該考慮使用觀察者模式;
2. 一個抽象模型有兩個方面,其中一個方面依賴於另一方面, 這時用觀察者模式可以將這兩者封閉在獨立的對象中使它們各自獨立地改變和複用;
3. 觀察者模式所做的工作其實就是在解除耦合。讓耦合的雙方都依賴於抽象,而不是依賴於具體,從而使得各自的變化都不會影響另一邊的變化。
應用:
JUnit中測試結果的輸出(待續)
IOC與觀察者模式結合:http://www.theserverside.com/tt/articles/article.tss?l=SpringLoadedObserverPattern