基于事件的隐式调用风格
2015-07-15 20:50
976 查看
基于事件的隐式调用风格
基本组件:对象或过程,并分类为以下更小的组件–过程或函数,充当事件源或事件处理器的角色
–事件
连接件:事件-过程绑定
–过程(事件处理器,事件的接收和处理方) 向特定的
事件进行注册;
–组件(事件源) 发布事件;
–当某些事件被发布(触发) 时,向其注册的过程被隐式调用;
–调用的次序是不确定的;
优点
§支持实现交互式系统(用户输入/网络通讯)
§异步执行,不必同步等待执行结果
§对事件的并发处理将提高系统性能;
缺点:
分布式控制方式使系统的同步、验证和调试变得异常困难:
–组件放弃了对系统计算的控制,难以控制各模块之间的处理次序。一个组件触发一个事件时,不能确定其它组件是否会响应它。而且即使它知道事件注册了哪些组件的构成,它也不能保证这些过程被调用的顺序。
–既然过程的语义必须依赖于被触发事件的上下文约束,关于正确性的推理则难以保证。
–传统的基于先验和后验条件的验证变得不可能。
程序:
1.基于事件的隐式调用风格
常用控制组件的事件——按钮与动作事件(ActionEvent),参见下例。
importjava.awt.*;
importjava.awt.event.*; //引入java.awt.event包处理事件
classBtnLabelAction extends Frame implements ActionListener{
//声明窗口类(BtnLabelAction)并实现动作事件接口(ActionListener)
Labelprompt;
Buttonbtn;
voidCreateWindow(){ //自定义方法
setTitle("MyButton");
prompt =new Label("你好");
//创建标签对象
btn =new Button("操作");
//创建按钮对象
setLayout(newFlowLayout()); //布局设计,用于安排按钮、标签的位置
add(prompt); //将标签放入容器
add(btn); //将按钮放入容器
btn.addActionListener(this); //将监听器(窗体对象本身)注册给按钮对象
setSize(300,100);
setVisible(true);
}
publicvoid actionPerformed(ActionEvent e){//接口ActionListener的事件处理方法
if(e.getSource()==btn) //判断动作事件是否是由按钮btn引发的
if(prompt.getText()=="你好")
prompt.setText("再见");
else
prompt.setText("你好");
}
}
public class BtnTest{
publicstatic void main (String args[]){
BtnLabelActionbla=new BtnLabelAction();
bla.CreateWindow();
}
}
相关文章推荐
- POJ 1258 Agri-Net //Prim算法
- 静态文件服务器(The static file servers)
- 使用Windows BitLocker进行安全磁盘加密
- uva 1366(dp)
- iOS中runtime运行机制解析
- ZOJ 2770 Burn the Linked Camp 差分约束
- Windows批处理:请求远程协助
- bzoj2154
- Eclipse常见操作
- Linux下的LVM管理
- Linux下的LVM管理
- Labview软件的特点
- MySQL主从复制(Master-Slave)
- Codeforces 558A Lala Land and Apple Trees(Sort快排)
- Python垃圾回收机制
- 调用返回风格(面向对象与主程序子程序)
- 【MySQL】(2)数据类型与操作数据表
- Codeforces Round #312 (Div. 2) ABC题解
- Python.Scrapy.14-scrapy-source-code-analysis-part-4
- IOS学习笔记-OC初体验