![觀察者模型課件_第1頁](http://file4.renrendoc.com/view11/M01/2D/2C/wKhkGWejE7GAer8_AAEAcNNKXZQ792.jpg)
![觀察者模型課件_第2頁](http://file4.renrendoc.com/view11/M01/2D/2C/wKhkGWejE7GAer8_AAEAcNNKXZQ7922.jpg)
![觀察者模型課件_第3頁](http://file4.renrendoc.com/view11/M01/2D/2C/wKhkGWejE7GAer8_AAEAcNNKXZQ7923.jpg)
![觀察者模型課件_第4頁](http://file4.renrendoc.com/view11/M01/2D/2C/wKhkGWejE7GAer8_AAEAcNNKXZQ7924.jpg)
![觀察者模型課件_第5頁](http://file4.renrendoc.com/view11/M01/2D/2C/wKhkGWejE7GAer8_AAEAcNNKXZQ7925.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
觀察者模式觀察者模式是一種常用的設計模式,它允許一個對象(目標對象)將自身的變化通知給其他對象(觀察者對象)。定義觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監(jiān)聽某一個目標對象。當目標對象的狀態(tài)發(fā)生改變時,所有依賴于它的觀察者對象都會收到通知并自動更新。主要角色目標對象目標對象包含一個觀察者列表,并且提供方法來添加、刪除觀察者。當目標對象發(fā)生變化時,會通知所有觀察者。觀察者對象觀察者對象定義一個更新方法,用于接收目標對象的通知并做出相應的反應。時序圖1目標對象創(chuàng)建,并添加觀察者。2目標對象狀態(tài)發(fā)生變化。3目標對象通知所有觀察者。4觀察者收到通知并更新自身狀態(tài)。優(yōu)點松耦合目標對象和觀察者之間沒有直接的耦合關系,它們通過接口進行交互。靈活擴展可以方便地添加或刪除觀察者,而不會影響其他觀察者或目標對象??蓮陀眯愿哂^察者模式可以被應用于多種場景,具有較高的復用性。缺點性能損耗當目標對象發(fā)生變化時,需要通知所有觀察者,這可能會導致性能損耗,尤其是當觀察者數(shù)量較多時。復雜性增加觀察者模式會增加代碼的復雜性,需要仔細設計才能避免代碼混亂。使用場景氣象站當氣象站監(jiān)測到天氣變化時,可以通知多個訂閱者,例如手機應用、新聞網(wǎng)站等。股票交易當股票價格發(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){//實現(xiàn)具體更新邏輯console.log(`溫度更新為:${temperature}`);}}示例代碼解析1WeatherStation目標對象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){//實現(xiàn)具體交易邏輯console.log(`股票${}價格變?yōu)椋?{stock.price}`);}}示例代碼解析1Stock目標對象2addObserver添加觀察者3removeObserver刪除觀察者4notifyObservers通知所有觀察者5setPrice更新價格并通知觀察者總結(jié)1定義觀察者模式定義了一種一對多的依賴關系。2角色目標對象和觀察者對象。3優(yōu)點松耦合、靈活擴展、可復用性高。4缺點性能損耗、復雜性增加。Q&A什么是觀察者模式?觀察者模式是一種設計模式,它允許一個對象將自身的變化通知給其他對象。觀察者模式的優(yōu)點是什么?觀察者模式的優(yōu)點包括松耦合、靈活擴展、可復用性高。觀察者模式在JavaScript中的實現(xiàn)在JavaScript中,可以使用事件機制來實現(xiàn)觀察者模式。目標對象可以觸發(fā)事件,觀察者對象可以監(jiān)聽事件并做出相應的反應。觀察者模式的實現(xiàn)步驟定義目標對象目標對象包含一個事件列表,并提供添加、刪除事件監(jiān)聽器的方法。定義觀察者對象觀察者對象定義一個處理事件的方法。注冊事件監(jiān)聽器觀察者對象注冊到目標對象的事件列表中。觸發(fā)事件當目標對象發(fā)生變化時,觸發(fā)相應的事件。觀察者模式的優(yōu)點松耦合目標對象和觀察者之間沒有直接的耦合關系。靈活擴展可以方便地添加或刪除觀察者??蓮陀眯愿哂^察者模式可以被應用于多種場景。觀察者模式的缺點性能損耗當目標對象發(fā)生變化時,需要通知所有觀察者,這可能會導致性能損耗。復雜性增加觀察者模式會增加代碼的復雜性。觀察者模式的應用場景用戶界面當用戶界面發(fā)生變化時,可以通知觀察者對象,例如更新視圖。數(shù)據(jù)同步當數(shù)據(jù)源發(fā)生變化時,可以通知觀察者對象,例如更新數(shù)據(jù)緩存。常見的觀察者模式實現(xiàn)常見的觀察者模式實現(xiàn)包括:事件機制、發(fā)布-訂閱模式、信號槽機制等。發(fā)布-訂閱模式和觀察者模式的區(qū)別發(fā)布-訂閱模式是觀察者模式的一種擴展,它允許觀察者訂閱多個主題。而觀察者模式只能監(jiān)聽一個目標對象。使用觀察者模式的注意事項使用觀察者模式時,需要注意避免循環(huán)依賴、防止內(nèi)存泄漏、控制觀察者數(shù)量等。觀察者模式的設計原則觀察者模式的設計原則包括:接口隔離、單一職責、開閉原則等。觀察者模式的最佳實踐觀察者模式的最佳實踐包括:使用接口、使用事件隊列、避免過多的觀察者等。觀察者模式的變體和擴展觀察者模式的變體和擴展包括:發(fā)布-訂閱模式、事件總線、觀察者鏈等。觀察者模式的實際應用案例觀察者模式被廣泛應用于各種軟件系統(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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 金融租賃居間合同模板
- 始興縣中醫(yī)院特殊用房設施設備采購及安裝及醫(yī)療設備采購項目招標文件
- 終止合同退款協(xié)議
- 未維修事故車買賣合同協(xié)議書
- 企業(yè)人才培養(yǎng)與發(fā)展作業(yè)指導書
- 質(zhì)押礦產(chǎn)權(quán)收益權(quán)擔保協(xié)議書
- 養(yǎng)雞業(yè)養(yǎng)殖技術手冊
- 庫房轉(zhuǎn)租合同
- 智能倉儲標準化管理與供應鏈優(yōu)化項目實踐
- 焊接結(jié)構(gòu)分析與優(yōu)化作業(yè)指導書
- 校本課程《生活中的化學》教案
- 寶典三猿金錢錄
- 安徽凌瑋新材料科技有限公司年產(chǎn)2萬噸超細二氧化硅氣凝膠系列產(chǎn)品項目環(huán)境影響報告書
- 聚合物粘彈性
- 建筑工程施工現(xiàn)場安全資料管理規(guī)程解讀
- 華銀鋁項目氧化鋁系統(tǒng)總體投料試車方案
- 2023年衛(wèi)生院崗位大練兵大比武競賽活動實施方案
- 2023年浙江省初中學生化學競賽初賽試卷
- 遼海版小學五年級美術下冊全套課件
- 專題7閱讀理解之文化藝術類-備戰(zhàn)205高考英語6年真題分項版精解精析原卷
- 2022年廣東省10月自考藝術概論00504試題及答案
評論
0/150
提交評論