觀察者模式定義
定義對(duì)象之間的一種一對(duì)多依賴關(guān)系,是的每當(dāng)一個(gè)對(duì)象狀態(tài)發(fā)生改變時(shí),期相依賴對(duì)象皆得到通知并被自動(dòng)更新门坷,觀察者模式的名稱把包括訂閱-發(fā)布模式,模型-視圖模式袍镀,源-監(jiān)聽器模式默蚌,或者從屬者模式,觀察者模式是一種行為型模式苇羡。
觀察者模式結(jié)構(gòu)圖
觀察者模式主要優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
1.觀察者模式可以實(shí)現(xiàn)表示層和數(shù)據(jù)邏輯層的分離绸吸,定義穩(wěn)定消息更新傳遞機(jī)制,并抽象更新接口宣虾。是的可以各種各樣不同的表示層充當(dāng)具體觀察者角色惯裕。
2.觀察者模式的觀察目標(biāo)和觀察者之間建立一種抽象的耦合。觀察者目標(biāo)只需要維持一個(gè)抽象觀察者的集合绣硝,無(wú)須了解其具體觀察者。由于觀察者和觀察目標(biāo)沒有緊密的耦合在一起撑刺,因此他們可以屬于不同抽象化層次鹉胖。
3觀察者模式支持廣播通信,觀察目標(biāo)會(huì)想所有已注冊(cè)的觀察者對(duì)象發(fā)送通知够傍,簡(jiǎn)化一對(duì)多系統(tǒng)設(shè)計(jì)難度甫菠。
4.觀察者模式滿足開閉原則的要求。增加新的具體觀察者無(wú)須修改原有系統(tǒng)代碼冕屯,在具體觀察者與觀察目標(biāo)之間不存在關(guān)聯(lián)關(guān)系的情況下寂诱。增加新的觀察者目標(biāo)也很方便。
缺點(diǎn)
1如果一個(gè)觀察目標(biāo)對(duì)象有很多直接和簡(jiǎn)潔觀察者安聘,將所有觀察者都通知到花費(fèi)很多時(shí)間痰洒。
2 如果在觀察者和觀察目標(biāo)之間存在循環(huán)依賴,觀察目標(biāo)會(huì)出發(fā)他們之間進(jìn)行循環(huán)調(diào)用浴韭∏鹩鳎可能導(dǎo)致系統(tǒng)崩盤
3.觀察者模式?jīng)]有相應(yīng)的機(jī)智讓觀察者知道所觀察目標(biāo)對(duì)象是怎么發(fā)生的變化,而僅僅通知目標(biāo)發(fā)生變化
觀察者模式適用場(chǎng)景
1 一個(gè)抽象模型有兩個(gè)方面念颈,其中一個(gè)方面依賴另一個(gè)方面泉粉,將兩個(gè)方面封裝在獨(dú)立的對(duì)象中使他們可以各自地改變和復(fù)用
2 一個(gè)對(duì)象的變化將導(dǎo)致一個(gè)或者多個(gè)對(duì)象變化,而并不知道具體有多少對(duì)象講發(fā)生變化。也不知道這些對(duì)象是誰(shuí)嗡靡。
3 需要系統(tǒng)中穿件一個(gè)觸發(fā)鏈跺撼,a對(duì)象行為印象B對(duì)象,B對(duì)象的行為將印象C
對(duì)象讨彼。财边。可以使用觀察者穿件一種練市觸發(fā)機(jī)制点骑。
java事件處理中如何使用觀察者模式
當(dāng)一個(gè)具體目標(biāo)產(chǎn)生一個(gè)事件時(shí)酣难,他將通知所有訂閱者。事件的發(fā)布著成為事件源黑滴,而訂閱者成為事件監(jiān)聽器憨募,在這個(gè)過(guò)程中還可以通過(guò)事件對(duì)象來(lái)傳遞與事件相關(guān)的信息≡玻可以在時(shí)間監(jiān)聽者的實(shí)現(xiàn)類中實(shí)現(xiàn)事件處理菜谣,因此事件監(jiān)聽對(duì)象有可以成為事件處理對(duì)象。事件源對(duì)象晚缩、事件監(jiān)聽對(duì)象和事件對(duì)象構(gòu)成java事件處理模式三要素尾膊,事件源從當(dāng)觀察者,而事件監(jiān)聽對(duì)象充當(dāng)觀察者荞彼。
觀察者模式與MVC的關(guān)系
mvc是一種架構(gòu)模式冈敛,包含三個(gè)角色:模型、視圖鸣皂、控制器抓谴。模型可以對(duì)應(yīng)觀察者中的觀察者目標(biāo),而視圖對(duì)應(yīng)于觀察者寞缝,控制器可以充當(dāng)兩者之間的中介者癌压。