標籤:
讓你的對象,知悉現況-----觀察者模式
一、觀察者模式有多個觀察者關注一個主題,當主題狀態發生變化時,觀察者們會得到通知,更新狀態1、認識觀察者模式---訂報紙(1) 報社的業務是出版報紙
(2) 向某報社訂報紙,只要他們有新報紙出版,就會給你送來。只要你是他們的訂戶,你就會一直收到新報紙
(3) 當你不想要報紙了,取消訂閱,報社就不會再送新報紙了
(4) 只要報社還在運營,就會一直有人向他們訂閱報紙或取消訂閱
一句話:觀察者模式 = 出版者(主題Subject)+ 訂閱者(觀察者Observer)
2、定義觀察者模式定義了對象之間的一對多依賴,這樣一來,當一個對象(如報社)改變狀態時,它的所有依賴者(訂閱者)都會收到通知並自動更新。
3、類圖
4、設計原則松耦合設計:為了互動對象之間的松耦合設計而努力。
觀察者模式提供了這種對象設計,讓主題和觀察者之間松耦合。
二、執行個體:氣象監測站1、問題描述利用WeatherData對象(Subject)取得資料,並更新三個布告板(Observer):目前狀況、氣象統計和天氣預報。觀察者模式,一對多關聯性,在本例中,“WeatherData”是一,布告板是多
一旦WeatherDatae有新的測量,馬上會更新布告板
2、設計類圖 3、code實現1、介面
2、主題對象
3、布告板
4、測試
三、java內建的觀察者模式1、java.util包中包含最基本的Observer介面和Observeable類,可以使用推push或拉pull的方式傳送資料2、java內建的觀察者模式設計氣象監測站
3、code實現
四、總結1、Observable是一個類,更zao的是,它甚至沒有實現一個介面。總之,Observable的實現有許多問題,限制了它的使用和複用。 (注,java內建觀察者模式,notifyObservers()通知觀察者次序不固定)2、最佳實務:如果內建觀察者模式滿足需求,可用它,否則自己實現它。
《Head First-Chapter2》觀察者模式