![观察者模型课件_第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)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
观察者模式观察者模式是一种常用的设计模式,它允许一个对象(目标对象)将自身的变化通知给其他对象(观察者对象)。定义观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个目标对象。当目标对象的状态发生改变时,所有依赖于它的观察者对象都会收到通知并自动更新。主要角色目标对象目标对象包含一个观察者列表,并且提供方法来添加、删除观察者。当目标对象发生变化时,会通知所有观察者。观察者对象观察者对象定义一个更新方法,用于接收目标对象的通知并做出相应的反应。时序图1目标对象创建,并添加观察者。2目标对象状态发生变化。3目标对象通知所有观察者。4观察者收到通知并更新自身状态。优点松耦合目标对象和观察者之间没有直接的耦合关系,它们通过接口进行交互。灵活扩展可以方便地添加或删除观察者,而不会影响其他观察者或目标对象。可复用性高观察者模式可以被应用于多种场景,具有较高的复用性。缺点性能损耗当目标对象发生变化时,需要通知所有观察者,这可能会导致性能损耗,尤其是当观察者数量较多时。复杂性增加观察者模式会增加代码的复杂性,需要仔细设计才能避免代码混乱。使用场景气象站当气象站监测到天气变化时,可以通知多个订阅者,例如手机应用、新闻网站等。股票交易当股票价格发生变化时,可以通知多个交易者,让他们及时做出交易决策。示例代码-气象站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){//实现具体更新逻辑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){//实现具体交易逻辑console.log(`股票${}价格变为:${stock.price}`);}}示例代码解析1Stock目标对象2addObserver添加观察者3removeObserver删除观察者4notifyObservers通知所有观察者5setPrice更新价格并通知观察者总结1定义观察者模式定义了一种一对多的依赖关系。2角色目标对象和观察者对象。3优点松耦合、灵活扩展、可复用性高。4缺点性能损耗、复杂性增加。Q&A什么是观察者模式?观察者模式是一种设计模式,它允许一个对象将自身的变化通知给其他对象。观察者模式的优点是什么?观察者模式的优点包括松耦合、灵活扩展、可复用性高。观察者模式在JavaScript中的实现在JavaScript中,可以使用事件机制来实现观察者模式。目标对象可以触发事件,观察者对象可以监听事件并做出相应的反应。观察者模式的实现步骤定义目标对象目标对象包含一个事件列表,并提供添加、删除事件监听器的方法。定义观察者对象观察者对象定义一个处理事件的方法。注册事件监听器观察者对象注册到目标对象的事件列表中。触发事件当目标对象发生变化时,触发相应的事件。观察者模式的优点松耦合目标对象和观察者之间没有直接的耦合关系。灵活扩展可以方便地添加或删除观察者。可复用性高观察者模式可以被应用于多种场景。观察者模式的缺点性能损耗当目标对象发生变化时,需要通知所有观察者,这可能会导致性能损耗。复杂性增加观察者模式会增加代码的复杂性。观察者模式的应用场景用户界面当用户界面发生变化时,可以通知观察者对象,例如更新视图。数据同步当数据源发生变化时,可以通知观察者对象,例如更新数据缓存。常见的观察者模式实现常见的观察者模式实现包括:事件机制、发布-订阅模式、信号槽机制等。发布-订阅模式和观察者模式的区别发布-订阅模式是观察者模式的一种扩展,它允许观察者订阅多个主题。而观察者模式只能监听一个目标对象。使用观察者模式的注意事项使用观察者模式时,需要注意避免循环依赖、防止内存泄漏、控制观察者数量等。观察者模式的设计原则观察者模式的设计原则包括:接口隔离、单一职责、开闭原则等。观察者模式的最佳实践观察者模式的最佳实践包括:使用接口、使用事件队列、避免过多的观察者等。观察者模式的变体和扩展观察者模式的变体和扩展包括:发布-订阅模式、事件总线、观察者链等。观察者模式的实际应用案例观察者模式被广泛应用于各种软件系统,例如:游戏引擎、数据库、Web框架等。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB 3705T 50-2024设施蝴蝶兰高效栽培技术规程
- 专业保姆照顾老人合同书
- 中小企业采购合同样本
- 个体工商户联营合作协议合同样本
- 专业离婚财产分割合同范例解析
- 乡村旅游产业发展战略合作合同书范本2025
- 临时劳动合同(筹备期间雇佣)
- 个人商业贷款合同
- 临时变压器租赁合同版
- 二手房交易正式合同范本
- 聚合物粘弹性
- 建筑工程施工现场安全资料管理规程解读
- 养老护理员培训老年人日常生活照料
- 黑龙江省哈尔滨市八年级(下)期末化学试卷
- 各种抽油泵的结构及工作原理幻灯片
- 学习弘扬雷锋精神主题班会PPT雷锋精神我传承争当时代好少年PPT课件(带内容)
- 社区获得性肺炎的护理查房
- 体育赛事策划与管理第八章体育赛事的利益相关者管理课件
- 专题7阅读理解之文化艺术类-备战205高考英语6年真题分项版精解精析原卷
- 《生物资源评估》剩余产量模型
- 2022年广东省10月自考艺术概论00504试题及答案
评论
0/150
提交评论