|
|
@ -1,3 +1,121 @@
|
|
|
|
|
|
|
|
## 事件系统风格(独立构件)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 定义
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 能够激活对象功能的动作。当发生这种动作后将给所涉及对象发送一个消息,对象便可执行相应的功能
|
|
|
|
|
|
|
|
- 对某一对象发生什么事件,该对象便找到相应的处理该事件的程序去处理这一事件
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 事件的隐式调用
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 构件不直接调用一个过程,而是触发或广播一个或多个事件。
|
|
|
|
|
|
|
|
- 系统中的其它构件中的过程在一个或多个事件中注册,当一个事件被触发,系统自动调用在这个事件中注册的所有过程,这样,一个事件的触发就导致了另一模块中的过程的调用。
|
|
|
|
|
|
|
|
- 这种系统,称为基于事件的系统,采用隐式调用的方式。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 为何称为“独立构件”风格?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 这种风格的主要特点是:**事件的触发者并不知道哪些构件会被这些事件影响,相互保持独立。**
|
|
|
|
|
|
|
|
- 这样不能假定构件的处理顺序,甚至不知道哪些过程会被调用;
|
|
|
|
|
|
|
|
- 各个构件之间彼此之间无连接关系,各自独立存在,**通过对事件的发布和注册实现关联;**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 基本构成和工作原理
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 特点 | 描述 |
|
|
|
|
|
|
|
|
| ---------------- | ------------------------------------------------------- |
|
|
|
|
|
|
|
|
| 分离的交互 | 事件发布者并不会意识到事件订阅者的存在。 |
|
|
|
|
|
|
|
|
| 一对多通信 | 采用发布/订阅消息传递,一个特定事件可以影响多个订阅者。 |
|
|
|
|
|
|
|
|
| 基于事件的触发器 | 由事件触发过程调用。 |
|
|
|
|
|
|
|
|
| 异步 | 支持异步调用。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 事件系统风格举例
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
遇到断点,编辑器将源代码滚动到断点处,变量监测器则更新当前变量值并显示出来。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 事件系统的优缺点
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
隐式调用系统的主要优点
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- **为软件重用提供了强大的支持**:当需要将一个构件加入现存系统中时,只需将它注册到系统的事件中。
|
|
|
|
|
|
|
|
- **为改进系统带来了方便**: 当用一个构件代替另一个构件时,不会影响到其它构件的接口。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
隐式调用系统的主要缺点
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- **构件放弃了对系统计算的控制**:一个构件触发一个事件时,不能确定其它构件是否会响应它。即使它知道事件注册了哪些构件的构成,它也不能保证这些过程被调用的顺序。
|
|
|
|
|
|
|
|
- **数据交换的问题**:有时数据可被一个事件传递,但另一些情况下,基于事件的系统必须依靠一个共享的仓库进行交互。这也使全局性能和资源管理便成了问题。
|
|
|
|
|
|
|
|
- **正确性的推理存在问题**:这是由于过程的语义必须依赖于被触发事件的上下文约束。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 仓库风格
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 定义
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**数据库系统、超文本系统和黑板系统都属于仓库风格。**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
在这种风格中,**数据仓库(如文件或数据库)位于这种体系结构的中心,**其他构件会经常访问该数据仓库,并对仓库中的数据进行增加、修改或删除操作。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 仓库风格实例
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
注册表
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 最初,硬件/软件系统的配置信息均被各自保存在一个配置文件(.ini):
|
|
|
|
|
|
|
|
- 这些文件散落在系统的各个角落,很难对其进行维护;
|
|
|
|
|
|
|
|
- 为此,引入注册表,其思想是将所有.ini文件集中起来,形成共享仓库,为系统运行趣起到了集中的资源配置管理和控制调度的作用
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
剪贴板
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 剪贴板是一个用来进行短时间的数据存储并在文档/应用之间进行数据传递和交换的软件程序
|
|
|
|
|
|
|
|
- 用来存储带传递和交换信息的公共区域(形成共享仓库)﹔
|
|
|
|
|
|
|
|
- 不同的应用程序通过该区域交换格式化的信息;
|
|
|
|
|
|
|
|
- 访问剪贴板的方式: copy paste.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 仓库风格的连接件
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
**连接件**:仓库与独立构件之间的交互存在**两种交互机制**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- **数据库方式**:输入流中的事务类型触发需要执行的过程
|
|
|
|
|
|
|
|
- **黑板结构**:中心数据结构的当前状态触发并选择需要执行的过程
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 黑板结构
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 黑板体系结构是仓库体系结构的特殊化。黑板体系结构模型通常由知识源、黑板数据结构和控制器三部分构成。
|
|
|
|
|
|
|
|
- 黑板风格是人工智能应用系统的重要设计方法之一。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 知识源
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 知识源描述某个独立领域问题的知识及其处理方法
|
|
|
|
|
|
|
|
- 通常知识源具有“条件-动作”的形式。当条件满足时,知识源被触发,其动作部分增加或修改黑板上内容。
|
|
|
|
|
|
|
|
- 每个知识源分别存放且相互独立
|
|
|
|
|
|
|
|
- 知识源通过黑板进行通讯,合作求出问题的解
|
|
|
|
|
|
|
|
- 计算过程
|
|
|
|
|
|
|
|
- 待解决的问题被分为若干个子问题,每个子问题由一个独立的知识源加以计算。
|
|
|
|
|
|
|
|
- 知识源包含独立的领域知识。
|
|
|
|
|
|
|
|
- 知识源执行计算后会更新黑板里的数据状态。
|
|
|
|
|
|
|
|
- 多个知识源之间只能通过黑板交换知识
|
|
|
|
|
|
|
|
- 通过对黑板的读写操作来完成交换。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 控制器
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- 时刻监视黑板状态变化
|
|
|
|
|
|
|
|
- 对黑板上信息的当前状态进行判断和评价
|
|
|
|
|
|
|
|
- 当黑板的状态满足了知识源的执行条件时,该知识源被控制器触发并进行计算,然后将结果更新到黑板上
|
|
|
|
|
|
|
|
- 这种更新又导致其他知识源参与计算并更新黑板,直到找到问题解为止
|
|
|
|
|
|
|
|
|
|
|
|
## MVC风格
|
|
|
|
## MVC风格
|
|
|
|
|
|
|
|
|
|
|
|
> 基本概念
|
|
|
|
> 基本概念
|
|
|
@ -23,7 +141,7 @@
|
|
|
|
- 获取用户输入
|
|
|
|
- 获取用户输入
|
|
|
|
- 向controller发送处理请求
|
|
|
|
- 向controller发送处理请求
|
|
|
|
- 接收来自Controller的反馈并将model的处理结果显示给用户
|
|
|
|
- 接收来自Controller的反馈并将model的处理结果显示给用户
|
|
|
|
- Controller(控制器)
|
|
|
|
- Controller(控制器)
|
|
|
|
- 接收来自客户的请求
|
|
|
|
- 接收来自客户的请求
|
|
|
|
- 调用model业务逻辑方法
|
|
|
|
- 调用model业务逻辑方法
|
|
|
|
- 调用View显示执行结果
|
|
|
|
- 调用View显示执行结果
|
|
|
|