C++设计模式第五讲讲义.pptVIP

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C设计模式第五讲讲义

* 《C++设计模式教程》 第五讲:UIPLib设计模式(二) (观察者模式、模板方法模式、UIPLib整体架构和用法) 主讲人:步磊峰 UIPower 3D界面引擎负责人 第一节: 观察者模式(事件系统) * 意图: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象得到通知并自动更新 将一个系统分割成一系列相互协作的类有一个常见的副作用:需要维护相关对象间的一致性。 我们不希望为了维护一致性而使各个类紧密耦合,因为这样降低了他们的可重用性。 观察者(或者说是事件)模式是Model-View-Controler(MVC)模型的基础。 第一节: 观察者模式(事件系统) * 假设一个表格对象和一个柱状图可以使用不同的表现形式描述同一个应用数据对象的信息。 1)在这种情况下,表格和柱状图是View(显示对象),应用数据是Model(数据),View和model通过Controler(事件 处理程序)进行更新通知并回调。 2)这一行为意味着表格和柱状图对象的显示依赖于数据对象,因此数据对象发生任何状态改变都应该通知他们。 3)同时我们没有理由将依赖于该数据对象的显示对象数目设定为2个,对相同的数据对象可以由任意数目的不 同View(显示对象)。 而观察者模式描述了如何建立这种关系。这一模式中关键对象是目标(Subject)和观察者(Observer). 一个目标可以有任意数目的依赖于它的观察者。一旦目标发生改变,所有的观察者都得到通知。作为对这个通知 的响应,每个观察者都将查询目标以使其状态与目标的状态同步。 第二节: 观察者模式教科书实现 * 第二节: 观察者模式教科书实现 * 第二节: 观察者模式教科书实现 * 1) 基于接口回调:凡是要进行事件处理,都必须继承自IObserver接口,并实现Update纯虚方法。 2) 如果要同时监听例如文本改变或颜色改变,无法多重继承,因为ISubject和IObserver接口的函数名已经指定了,多重继承情况下会导致命名冲突,即使使用虚拟继承也解决不了,因为虚拟继承共享同名函数的地址。 3) 要解决上面的问题,可以使用两种方式: 1、使用对象引用方式,例如: class CTextChange : public ISubject{}; class CTextChangeHandler : public IObserver {}; class CColorChange : public ISubject{}; class CColorChangeHandler : public IObserver{}; class CChangeClass { public: ISubject* pTextChange;

文档评论(0)

441113422 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档