Lect3_eventSysNew-2软件体系结构-PPT讲稿-汉语稿.ppt

Lect3_eventSysNew-2软件体系结构-PPT讲稿-汉语稿.ppt

  1. 1、本文档共65页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Lecture 3. 事件系统软件体系结构 事件系统的定义 事件处理策略 观察者模式 观察者模式设计实例 基于事件的,隐式调用的概念 显式调用(Explicit Invocation): 传统情况下,系统中的构件对外提供一个函数集合,例如面向对象系统,构件之间的交互是通过显式调用这些函数实现的。 基于事件的系统使用隐式调用 在基于事件的系统中,过程之间的调用是隐式的,通过事件实现,且一个事件可以调用多个过程自动执行。 基于事件的系统: 发布事件, 注册事件, 方法被自动调用 如何调用构件中的过程(Procedures)? 被调用的构件首先将自己的某个过程注册到系统中的某个事件,实现事件与过程的绑定 系统运行时,当某事件被发布,被绑定的过程将自动被执行. Example: 考虑C, C++ 或 Java的集成开发环境 这些IDE 通常包含如下工具 代码编辑器Editor, 变量监视器Variable Monitor, 调试器debugger等. 其实这些IDE即使用了隐式调用架构风格. 当一个事件被发布,系统能够自动调用注册了该事件的所有相关处理程序 但如何将事件分发到相关的事件处理程序呢?有两种事件处理策略: 有独立事件分遣模块 无独立事件分遣模块 事件分遣模块(Dispatcher)的功能是什么? 接收所有的事件 将事件分遣到相关模块 观察者模式非常适合于设计被观察者Subject与观察者Observers之间的交互关系 Observers: 一个相互之间保持独立的构件集合 Subject: 构件所依赖的对象 注意 1: 一个主题可以有多个观察者。每一个观察者都需要知道主题何时发生变化. 主题维护一个动态列表,记录已经注册的观察者. 观察者模式的工作过程: 观察者必须自行注册自身 观察者需要显式的将自身注册到感兴趣的主题(subject) 被观察者必须通知观察者 一旦subject的状态发生改变,它将通知所有注册到自己的观察者(observers) 观察者可以知道被观察者的状态 观察者一旦接收到来自subject的通知, 每一个观察者根据主题的状态来调整自身的状态(执行相关过程). 注意 2: 一个观察者可以注册多个主题 一个观察者可以取消注册主题 主题则应提供注册、取消注册的接口 被观察者(主题)有两种办法通知观察者: 拉式模型: 主题提供一个接口,观察者通过该接口查询主题的状态,并根据状态做出反应. 推式模型: 主题直接将状态信息发送给对该状态感兴趣的观察者, 观察者亦需提供一个特定的接口(如Update方法),以便接收来自主题的通知 所有的主题均需实现被观察者接口(Observable interface). 所有观察者均需提供观察者接口(Observer interface). 注意: 观察者模式可能拥有多种实现变种,例如观察者只对主题的某种变化感兴趣… 观察者模式的优点: 可以动态添加观察者而不需要影响主题。 2. 当主题的状态或者逻辑发生变化的时候,观察者不受影响。 Java语言环境对观察者模式的支持。 Java API支持Observanle/Observer策略(例如:J2SDK1.4). Java提供了以下的 Observable/Observer策略工作机制 被观察者可以将一个观察者添加到一个list. 这也说明被观察者同意被该观察者观察。 setChanged()和notifyObservers()将通知观察者主题对象的状态已经改变了,观察者对象的update()方法将自动运行。 在观察者对象的update()方法中,如果需要,可以调用被观察者中的相应方法,确切了解状态变化的细节。 设计场景: 分别以摄氏、华氏及凯文显示温度值。 首先提供一个图形用户界面,可以让用户输入摄氏或华氏或凯文温度值 然后提供三个界面,分别用于显示摄氏、华氏及凯文温度值 我们利用观察者模式对该案例进行软件设计 温度输入界面TemperatureGUI实现被观察者接口, 摄氏温度显示界面CelsiusGUI、华氏温度显示界面 FahrenheitGUI 和 KelvinGUI 则实现观察者接口 有两种实现方式 用户自行实现观察者模式 利用Java API 首先定义两个接口: Observable接口 Observer接口 在TemperatureGUI中实现以下方法: notifyObservers() register(obs: Observer) unRegister(obs:Observer) 在 CelsiusGUI, FahrenheitGUI和KelvinGUI三个构件中,均需实现如

文档评论(0)

东山书苑 + 关注
实名认证
内容提供者

业务以学生学习成长为中心,为外语培训、中小学基础教育、学前教育,提供各种学习资料支持服务。

1亿VIP精品文档

相关文档