觀察者模型課件_第1頁
觀察者模型課件_第2頁
觀察者模型課件_第3頁
觀察者模型課件_第4頁
觀察者模型課件_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

觀察者模式觀察者模式是一種常用的設(shè)計(jì)模式,它允許一個對象(目標(biāo)對象)將自身的變化通知給其他對象(觀察者對象)。定義觀察者模式定義了一種一對多的依賴關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個目標(biāo)對象。當(dāng)目標(biāo)對象的狀態(tài)發(fā)生改變時,所有依賴于它的觀察者對象都會收到通知并自動更新。主要角色目標(biāo)對象目標(biāo)對象包含一個觀察者列表,并且提供方法來添加、刪除觀察者。當(dāng)目標(biāo)對象發(fā)生變化時,會通知所有觀察者。觀察者對象觀察者對象定義一個更新方法,用于接收目標(biāo)對象的通知并做出相應(yīng)的反應(yīng)。時序圖1目標(biāo)對象創(chuàng)建,并添加觀察者。2目標(biāo)對象狀態(tài)發(fā)生變化。3目標(biāo)對象通知所有觀察者。4觀察者收到通知并更新自身狀態(tài)。優(yōu)點(diǎn)松耦合目標(biāo)對象和觀察者之間沒有直接的耦合關(guān)系,它們通過接口進(jìn)行交互。靈活擴(kuò)展可以方便地添加或刪除觀察者,而不會影響其他觀察者或目標(biāo)對象??蓮?fù)用性高觀察者模式可以被應(yīng)用于多種場景,具有較高的復(fù)用性。缺點(diǎn)性能損耗當(dāng)目標(biāo)對象發(fā)生變化時,需要通知所有觀察者,這可能會導(dǎo)致性能損耗,尤其是當(dāng)觀察者數(shù)量較多時。復(fù)雜性增加觀察者模式會增加代碼的復(fù)雜性,需要仔細(xì)設(shè)計(jì)才能避免代碼混亂。使用場景氣象站當(dāng)氣象站監(jiān)測到天氣變化時,可以通知多個訂閱者,例如手機(jī)應(yīng)用、新聞網(wǎng)站等。股票交易當(dāng)股票價(jià)格發(fā)生變化時,可以通知多個交易者,讓他們及時做出交易決策。示例代碼-氣象站classWeatherStation{constructor(){this.observers=[];}addObserver(observer){this.observers.push(observer);}removeObserver(observer){this.observers=this.observers.filter(o=>o!==observer);}notifyObservers(temperature){this.observers.forEach(observer=>observer.update(temperature));}setTemperature(temperature){this.temperature=temperature;this.notifyObservers(temperature);}}classObserver{update(temperature){//實(shí)現(xiàn)具體更新邏輯console.log(`溫度更新為:${temperature}`);}}示例代碼解析1WeatherStation目標(biāo)對象2addObserver添加觀察者3removeObserver刪除觀察者4notifyObservers通知所有觀察者5setTemperature更新溫度并通知觀察者示例代碼-股票交易classStock{constructor(name,price){=name;this.price=price;this.observers=[];}addObserver(observer){this.observers.push(observer);}removeObserver(observer){this.observers=this.observers.filter(o=>o!==observer);}notifyObservers(){this.observers.forEach(observer=>observer.update(this));}setPrice(price){this.price=price;this.notifyObservers();}}classTrader{update(stock){//實(shí)現(xiàn)具體交易邏輯console.log(`股票${}價(jià)格變?yōu)椋?{stock.price}`);}}示例代碼解析1Stock目標(biāo)對象2addObserver添加觀察者3removeObserver刪除觀察者4notifyObservers通知所有觀察者5setPrice更新價(jià)格并通知觀察者總結(jié)1定義觀察者模式定義了一種一對多的依賴關(guān)系。2角色目標(biāo)對象和觀察者對象。3優(yōu)點(diǎn)松耦合、靈活擴(kuò)展、可復(fù)用性高。4缺點(diǎn)性能損耗、復(fù)雜性增加。Q&A什么是觀察者模式?觀察者模式是一種設(shè)計(jì)模式,它允許一個對象將自身的變化通知給其他對象。觀察者模式的優(yōu)點(diǎn)是什么?觀察者模式的優(yōu)點(diǎn)包括松耦合、靈活擴(kuò)展、可復(fù)用性高。觀察者模式在JavaScript中的實(shí)現(xiàn)在JavaScript中,可以使用事件機(jī)制來實(shí)現(xiàn)觀察者模式。目標(biāo)對象可以觸發(fā)事件,觀察者對象可以監(jiān)聽事件并做出相應(yīng)的反應(yīng)。觀察者模式的實(shí)現(xiàn)步驟定義目標(biāo)對象目標(biāo)對象包含一個事件列表,并提供添加、刪除事件監(jiān)聽器的方法。定義觀察者對象觀察者對象定義一個處理事件的方法。注冊事件監(jiān)聽器觀察者對象注冊到目標(biāo)對象的事件列表中。觸發(fā)事件當(dāng)目標(biāo)對象發(fā)生變化時,觸發(fā)相應(yīng)的事件。觀察者模式的優(yōu)點(diǎn)松耦合目標(biāo)對象和觀察者之間沒有直接的耦合關(guān)系。靈活擴(kuò)展可以方便地添加或刪除觀察者??蓮?fù)用性高觀察者模式可以被應(yīng)用于多種場景。觀察者模式的缺點(diǎn)性能損耗當(dāng)目標(biāo)對象發(fā)生變化時,需要通知所有觀察者,這可能會導(dǎo)致性能損耗。復(fù)雜性增加觀察者模式會增加代碼的復(fù)雜性。觀察者模式的應(yīng)用場景用戶界面當(dāng)用戶界面發(fā)生變化時,可以通知觀察者對象,例如更新視圖。數(shù)據(jù)同步當(dāng)數(shù)據(jù)源發(fā)生變化時,可以通知觀察者對象,例如更新數(shù)據(jù)緩存。常見的觀察者模式實(shí)現(xiàn)常見的觀察者模式實(shí)現(xiàn)包括:事件機(jī)制、發(fā)布-訂閱模式、信號槽機(jī)制等。發(fā)布-訂閱模式和觀察者模式的區(qū)別發(fā)布-訂閱模式是觀察者模式的一種擴(kuò)展,它允許觀察者訂閱多個主題。而觀察者模式只能監(jiān)聽一個目標(biāo)對象。使用觀察者模式的注意事項(xiàng)使用觀察者模式時,需要注意避免循環(huán)依賴、防止內(nèi)存泄漏、控制觀察者數(shù)量等。觀察者模式的設(shè)計(jì)原則觀察者模式的設(shè)計(jì)原則包括:接口隔離、單一職責(zé)、開閉原則等。觀察者模式的最佳實(shí)踐觀察者模式的最佳實(shí)踐包括:使用接口、使用事件隊(duì)列、避免過多的觀察者等。觀察者模式的變體和擴(kuò)展觀察者模式的變體和擴(kuò)展包括:發(fā)布-訂閱模式、事件總線、觀察者鏈等。觀察者模式的實(shí)際應(yīng)用案例觀察者模式被廣泛應(yīng)用于各種軟件系統(tǒng),例如:游戲引擎、數(shù)據(jù)庫、Web框架等。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論