基于事件的隐式调用风格

基于事件的隐式调用风格

基本组件:对象或过程,并分类为以下更小的组件

–过程或函数,充当事件源或事件处理器的角色

–事件

连接件:事件-过程绑定

–过程(事件处理器,事件的接收和处理方) 向特定的

事件进行注册;

–组件(事件源) 发布事件;

–当某些事件被发布(触发) 时,向其注册的过程被隐式调用;

–调用的次序是不确定的;

优点

§支持实现交互式系统(用户输入/网络通讯)

§异步执行,不必同步等待执行结果

§对事件的并发处理将提高系统性能;

缺点:

分布式控制方式使系统的同步、验证和调试变得异常困难:

–组件放弃了对系统计算的控制,难以控制各模块之间的处理次序。一个组件触发一个事件时,不能确定其它组件是否会响应它。而且即使它知道事件注册了哪些组件的构成,它也不能保证这些过程被调用的顺序。

–既然过程的语义必须依赖于被触发事件的上下文约束,关于正确性的推理则难以保证。

–传统的基于先验和后验条件的验证变得不可能。

程序:

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();

}

  }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章