版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程:面向对象方法与技术,设计模式,观察者模式,定义:,观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。,观察者模式,一个现实例子,告诉学生,更新电话本中老师的号码,学生手机,老师手机,换号,通知学生,保存老师的号码,观察者模式,涉及到的角色:,Subject(目标,Subject):规定ConcreteSubject的统一接口;提供注册、删除观察者以及通知接口。 Observer(观察者,Observer):规定ConcreteObserver的统一接口, 定义了一个update()方法,在被
2、观察对象状态改变时会被调用。 ConcreteSubject(具体目标Teacher) :将有关状态存入Concrete-Observe对象,实现通知函数,当其状态发生改变时,向他的各个观察者发出通知。 ConcreteObserver(具体观察者Student) :存储有关状态,这些状态应与目标的状态保持一致。实现Observer的更新接口以使自身状态与目标的状态保持一致。,观察者模式,结构图,观察者模式,具体实现代码,抽象目标接口代码,观察者模式,具体目标类(老师类)代码,观察者模式,观察者模式,抽象观察者接口代码,观察者模式,具体观察者(学生)代码,客户端测试代码,创建一个老师对象,注册
3、观察者,老师修改电话号码,通知学生类修改存储的号码,观察者模式,模式的优点,具体目标和具体观察者是松耦合关系。由于目标(Subject)接口仅仅依赖于观察者(Observer)接口,因此具体目标只是知道它的观察者是实现观察者(Observer)接口的某个类的实例,但不需要知道具体是哪个类。同样,由于观察者仅仅依赖于目标(Subject)接口,因此具体观察者只是知道它依赖的目标是实现主题(subject)接口的某个类的实例,但不需要知道具体是哪个类。,观察模式满足“开-闭原则”。,观察者模式支持广播通信。,观察者模式,模式的缺点,如果一个观察目标对象有很多直接和间接的观察者的话,将所有的观察者都
4、通知到会花费很多时间。,如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。,Memento,在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。,备忘录模式的定义,Memento,一个现实例子,为了使软件的使用更加人化,对于一些错误的操作,我们需要提供一种类似“后悔药”的机制,让软件系统可以回到操作前的状态(比如word中的撤销操作),因此需要保存用户每一次操作时系统的状态,一旦出现误操作,可以把存储的历史状态取出即可回到之前的状态。,Memento,Originator(原发器):
5、创建一个备忘录,用以记录当前时刻对象的内部状态;使用备忘录恢复内部状态。 Memento(备忘录):备忘录存储原发器的内部状态。原发器根据需要决定备忘录存储原发器的哪些内部状态;防止原发器以外的其他对象访问备忘录。 Caretaker(负责人):负责保存好备忘录。不能对备忘录的内容进行操作或检查。,模式所涉及的角色:,Memento,Memento的类图,备忘录模式用一个Caretaker对象来保存发起者Originator的Memento状态。,Memento,负责人向原发器请求一个备忘录,保留一段时间后,再根据需要将其送回给原发器,代码实现如下:,模式实现,典型的负责人类代码如下所示:,Memento,典型的原发器类代码如下所示:,Memento,典型的备忘录类代码如下所示:,Memento,测试类代码:,运行结果:,Memento,实现了信息的封装,一个备忘录对象是负责人表示,不会被其他代码改动。对存储的状态起到保护作用,备忘录模式的优点,提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用先前存储起来的备忘录将状态复原。,Memento,备忘录模式的缺点,资源消耗过大,如果类的成员变量太多,就不可避免占用大量的内存,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Photoshop初级考试题库(含答案及详细解析)
- 2025-2026学年江苏省江都市初中生物七年级期末下册深度自测黑金考题详细参考解析
- 钢丝绳捻股工安全操作规程
- 皮带巡检工安全操作规程
- 内异症术后复发预警症状清单标准共识
- 辊道窑安全操作规程
- PAHS多环芳烃基础知识考试试题及详细答案(实操版)
- 脱轻塔安全操作规程
- 中轴型脊柱关节炎早期识别指南(2026版)
- 医院洁净吊顶安装施工方案
- T/CNNDAS 002-2026芬太尼类药品单支识别码技术规范
- 2026年高校教师资格证(高等教育学)考试题库(带答案)
- 《演唱 山谷回声真好听》课件2026-2027学年西师大版一年级上册音乐
- 教师职业心理赋能 焕发育人全新活力课件
- 2026-2027学年川教版(新教材)小学信息科技六年级上册(全册)教学设计(附目录p73)
- 2026年中国银行考试题目及答案
- 一例丘脑出血合并肺部感染雾化吸入治疗个案护理
- 教科版三年级上册科学第二单元《水》单元测试卷含答案A4打印版
- 2027年中国电信集团有限公司校园招聘考试参考试题及答案详解
- 2024年全国职业院校技能大赛中职组(美术造型赛项)考试题库(含答案)
- JBT 1306-2024 电动单梁起重机(正式版)
评论
0/150
提交评论