基于IOC的Java事件框架的设计与实现Ⅰ

传统的Java的事件机制是一种代理(委托器)模式和观察者(监听器)模式。 代理(Delegation)模式是以Component为中心来对事件机制进行阐述;而观察者(Observer)模式则是以监听器(Listener)为中心对事件机制进行阐述。 传统事件机制的事件可以大致表示如下: 触发器(组件)-> 监听器 -> 执行器 当组件发生改变时,组件封装一个Event(这个类封装了事件源,组件状态等必要信息),向它所注册的所有监听器进行通知(notify),各监听器判断事件类型是否为自己管辖范围,若是,则通知给该监听器的执行器(传递Event),执行器从Event中获取事件信息,并执行相应函数,改变组件的状态。 下面是利用传统Java事件机制来编写的一个输入数字计算平方的简单图形界面: package demo; import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class FrameDemo extends Frame implements ActionListener{ private TextField input; private Button calculate; private TextField show; private void init(){ input = new TextField(10); calculate = new Button("求平方"); show = new TextField(10); } public FrameDemo(){ this.init(); show.setEditable(false); calculate.addActionListener(this); this.setLayout(new FlowLayout()); this.add(input); this.add(calculate); this.add(show); this.setSize(300,80); this.setTitle("FrameDemo"); this.setVisible(true); } public void actionPerformed(ActionEvent event) { if(event.getSource()==calculate){ String numStr = input.getText(); double num = Double.parseDouble(numStr); String result = String.valueOf(num * num); show.setText(result); } } public static void main(String args[]){ new FrameDemo(); } }运行后如图所示: 以上传统的Java事件代码很简洁,委托器机制很清晰,但是思考如下问题: 1. 如果Frame内部有许多组件,我们将会看到很多重复的代码,如下: calculate.addActionListener(this); this.addWindowListener(); … 而这些注册监听器的代码都是与界面本身无关的代码,不应该让程序员关注,可以在底层实现。 2. 实现接口后的方法名被固定,如ActionListener须实现actionPerformed抽象方法。无法自定义。 3. 当组件数量较多,由于注册监听器和事件处理函数的代码成块状,组件与事件之间的映射关系将会很混乱。 4. 无法实现事件监听与事件处理的真正意义上的分离(假如事件处理函数定义在别的类中,无法得到Frame及其组件的引用,只能得到事件源(触发器),而无法改变其它组件状态)。 5. 不利于代码重用,基于 模型-视图-控制 思想,Frame类应该只用于界面的显示,事件处理函数应该分离出来;从而,在需要修改事件处理代码时,无须修改表现层(界面)的源代码。 于是我就产生一种新的想法,能否像Spring中bean由配置文件来生成那样,可以让Java事件的配置(注册监听器,事件执行器)在配置文件中配置?这样,事件处理方法能在任意类中实现,方法名自定义,并且能够得到Frame及其组件的引用。而在源代码中程序员无须关心事件的监听与实现,只需设置get,set方法来存取属性(组件)。 于是,经过若干天的努力和优化,一个原创的基于IOC思想的Java事件框架初步实现了。 更多内容:www.csufox.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值