- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
观察者模式(Observer Pattern)
描述:
????在设计一组依赖的对象与它们所依赖的对象之间一致(同步)的交流模型时,观察者模式(Observer?Pattern)很有用。它可以使依赖对象的状态与它们所依赖的对象的状态保持同步。这组依赖的对象指的是观察者(Observer),它们所依赖的对象称为主题(Subject)。为了实现观察者(Observer)的状态与主题(Subject)保持同步,观察者模式(Observer?Pattern)推荐采用发布者--订阅者(publisher--subscriber)模型,以使这组观察者(Observer)和主题(Subject)对象之间有清晰的界限。????典型的观察者(Observer)是一个依赖于或者关注于主题对象的状态的对象。一个主题可以有一个或者多个观察者。这些观察者在主体的状态发生变化时,需要得到通知。????由于给定主体的观察者链表需要动态的变化,因此一个主题不能维护一个静态的观察者链表。因此关注于主题状态的任何对象都需要明确地注册自己为主体的一个观察者。主题状态发生的变化,都需要通知所有的以注册的观察者。从主题接到通知以后,每一个观察者查询主题,使自己的状态与主题的同步。因此一个主题扮演着发布者的角色,发布信息到所有的以订阅的观察者。????换句话说,主题和它的观察者之间包含了一对多的关系。当主题的实例的状态发生变化时,所有的依赖于它的观察者都会得到通知并更新自己。每一个观察者对象需要向主题注册,当主题的状态发生变化的时候得到通知。一个观察者可以注册或者订阅多个主题。当观察者不希望再得到通知时,它可以向主题进行注销。????为了实现这种机制:(1)????主题需要为注册和注销通知提供一个接口。(2)????下面的两点也需要满足:A、????拉模型(In?the?pull?model)--主题需要提供一个接口,可以使观察者查询主题获得需要的状态信息来更新自己的状态。B、????推模型(In?the?push?model)--主题发送观察者可能关注的状态信息。(3)????观察者需要提供一个可以从主题接受通知的接口。类图(图33.1)描述了为满足于以上需求,不同类的结构和它们之间的关联关系。??Figure?33.1:?Generic?Class?Association?When?the?Observer?Pattern?Is?Applied?从这个类图可以看到:(1)????所有的主题需要提供一个类似于Observable接口的实现。(2)????所有的观察者需要提供一个类似于Observer接口的实现。在应用观察者模式时,有几种变体。这就会产生不同类型的主题--观察者模式,例如,观察者仅关注主体特定类型的变化等。
增加新的观察者:
????应用观察者模式以后,在不影响主题类的情况下,可以动态的加入不同的观察者。同样,主题的状态变化逻辑改变时,观察者也不会受到影响。例子:????为了管理一个卖厂多个分类产品,让我们建立一个销售报表系统。这个系统有以下特征:(1)????用户可以选择一个他们感兴趣的分类(2)????在选择了一个分类以后,需要显示下面的两种类型的报表。A、????月度报表(Monthly?report)--所选分类当月的所有交易清单。B、????年度累积额(YTD?sales?chart)--以月为单位显示选择分类的年度累积额图。(3)????当一个不同的分类被选择时,两种报表的数据会被刷新,显示当前所选分类的报表。为了实现以上期望的功能,我们很容易的看到两个报表对象依赖于持有用户选择分类的对象。应用观察者模式于此场景,我们可以设计一个介于持有用户选择分类的对象和两个报表对象之间一个一致(同步)的交流模型。让我们定义三个类,它们的功能如表33.1所描述:Table?33.1:?Subject-Observer?Classes??
public?interface?Observable?{?
??public?void?notifyObservers();?
??public?void?register(Observer?obs);?
??public?void?unRegister(Observer?obs);?
}?
??Figure?33.2:?Observable?Interface?and?Its?Implementer?ReportManager类(Listing33.1)提供了声明在Observable接口中方法的实现。两个依赖于ReportManager的报表对象使用这些方法注册它们自己为观察者。ReportManager把这些注册的观察者保存到observersList矢量(vector)中。当前选择的
您可能关注的文档
- 谈谈初中英语中表示情绪感觉的分词形容词.doc
- 高一英语授课提纲(教师版).doc
- 《英语国家社会与文化入门》课后问答答案!!!.docx
- 2017苏南五市对口单招二模卷 英语试卷.doc
- 美国国会图书馆分类法分类表L.doc
- 牛津上海版英语八年级下册教案:U1Trees.doc
- 大学 英语专业 精读教材第一单元课文内容及翻译.docx
- 2014综合训练题.doc
- 试卷-综合英语1(A).doc
- 英文读后感The Adventures of Sherlock Holmes.doc
- Native Speakers在讨论教育话题时会频繁使用的短语.doc
- 如果你有这些缺点那说明你比你想的要好.docx
- 设计模式:利用C#的Delegate来改进Observer模式.doc
- Intercultural Sensitivity-默认报告.docx
- 新视野四第九单元单元测试答案.doc
- 观察者(Observer)模式.docx
- 湖北省宜昌市一中2015-2016学年高二下学期二月月考英语试题.doc
- 高一英语 Module 1Unit 2 HeroLesson 1 Modern Heroes说课稿 北师大版1.doc
- CISCO-思科命令.doc
- JDK Observer设计模式之研究.doc
最近下载
- 人教版历史九年级上册全套教学课件.pptx
- DL_T 1074-2019 电力用直流和交流一体化不间断电源(代替DL_T 1074-2007).docx VIP
- 2025秋统编版(2024)道德与法治一年级上册教学设计(全册) .pdf
- 白癜风中西医防治(王砚宁)_部分1.pdf VIP
- 第二单元生物制品生产等基本技术61课件.pptx VIP
- 最全监理大纲(共486页).docx
- DLT_5293-2013 电气装置安装工程 电气设备交接试验报告统一格式.docx VIP
- MZT213-2024学术类社会团体自身建设指南.pdf VIP
- 职业素养与职业礼仪.docx VIP
- 政务视联网系统解决方案.pptx VIP
文档评论(0)