事件监听器模式(一个简单的例子)

事件监听器模式(一个简单的例子)


在GUI程序设计中,在设计时通常不会知道用户的动作什么时候会发生,如用户可能点击某一
个按钮,也可能不点击,而且点击按钮的时机在运行时才可能知道。如果用传统的程序控制
方式,则很难做到准确的响应。通常这种情况或者类似的情况下,我们可以使用事件/监听器模式。

将一个监听器(listener)与特定的控件(如按钮等)绑定起来,当发生用户点击等事件(Event)时,
调用监听器的处理方法,从而响应用户的动作。是为事件/监听器模式。

事件有很多种,而且事件发生的时序是不确定的。可以简单的定义一个事件的接口,如下例:

interface Event{
    static int event1 = 0;
    static int event2 = 1;
    static int event3 = 2;
    ...
    int getEventType();
}
 



一个监听器的接口的一种可能形式:

interface listener{
    void handleEvent(Event event);
}
 



实现监听器接口的类可以根据事件的类型作出具体的响应方式如:

class ListenerImpl implements Listener{
some other methods of this implementation;
...
void handleEvent(Event event){
    switch(event.getEventType()){
        case Event.event1:
            doSomething();
            break;
        case Event.event2:
            doSomethingElse();
            break;
        default:
            break;
    }
}

GUIThread thread = new GUIThread();
thread.setListener(this);//注册监听器
...
}
 


在GUI的主流程中,需要有一个Event的实现者,和一个发起事件的组件,如:

class EventImpl implements Event{
    private int type;
    public EnentImpl(int type){
        this.type = type;
    }
}

class GUIThread{
    private Listener listener;
    public void setListener(Listener listener){
        this.listener = listener;
    }
   
    public void execute(){
        if(this.listener != null){
            Event event = new EventImpl(type);//触发了某事件
            listener.handleEvent(event);
        }
    }
}

 

当然,这个实现只是一个原理性的描述,应该可以很容易根据这个描述作出自己的实现。关于事件的处理以及事件类型的定义等可以完全根据自己的需求定制。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值