1. 定義
定義對(duì)象間的一種一對(duì)多的關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴它的對(duì)象都得到通知,并被自動(dòng)更新。
2. 使用的原因
在應(yīng)用程序開發(fā)過程中,往往都要求用戶界面和業(yè)務(wù)邏輯分離,劃定清晰的界限.因?yàn)閼?yīng)用程序要求能快速的更改用戶界面并且不能對(duì)應(yīng)用程序其他部分產(chǎn)生連帶影響,而且業(yè)務(wù)邏輯也會(huì)發(fā)生變化并要求這一切變化與用戶界面無關(guān).觀察者(observer)就是解決此問題最常用的設(shè)計(jì)模式,它非常有助于在系統(tǒng)中各個(gè)對(duì)象之間劃分清晰的界限。
觀察者模式在界面設(shè)計(jì)中應(yīng)用廣泛。
還有一種常見的情況,一個(gè)軟件系統(tǒng)常常要求在某一個(gè)對(duì)象發(fā)生變化的時(shí)候,某些其它的對(duì)象做出相應(yīng)的改變,而觀察者模式是解決這個(gè)問題的一個(gè)低耦合度的設(shè)計(jì)方案,它能夠減少對(duì)象之間的耦合以便更加利于系統(tǒng)的復(fù)用。
3. 適用的情況舉例
eg1.
4. 類圖結(jié)構(gòu)及說明
1)示意性類圖如下所示:

2)類說明
i)抽象主題Subject:用于將所有的對(duì)象引用保存在一個(gè)聚集中(比如Vector對(duì)象)里,每個(gè)Subject可以有任何數(shù)量的觀察者。它又被叫做抽象觀察者(Observable)角色,一般使用抽象類或接口實(shí)現(xiàn)。
ii)抽象觀察者Observer:為所有的具體觀察者定義一個(gè)接口,在得到Subject的通知時(shí)更新自己。
iii)具體主題ConcreteSubject:將有關(guān)狀態(tài)存入具體觀察者對(duì)象。在具體主題的內(nèi)部狀態(tài)改變時(shí),給所有登記過的觀察者發(fā)出通知。又被稱為具體被觀察者角色。
iv)具體觀察者ConcreteObserver:實(shí)現(xiàn)了抽象觀察者Observer,在被觀察者發(fā)出通知時(shí),將自行執(zhí)行update方法更新。
5. 使用舉例
待續(xù)。
6. 參考文章
1)《Pattens In Java》
2)《Java與模式》
3)http://i.cn.yahoo.com/whj1234586/blog/p_34/
4)http://www.999qc.cn/Article/NET/15500/