-
前言
回调是一种常见的程序设计模式,利用回调技术可以处理这样的问题,事件A发生时要执行处理事件A的代码,判断何时发生事件A及何时执行处理事件A的代码。这些代码是固定的,先行编写完毕,供使用。但事件A的处理代码开放给其他开发人员编写,可以有很多不同的实现,使用时可以注册具体需要的实现来处理。
Java中Swing与AWT的事件监听处理模型就是使用接口与回调实现的,后面学习Applet之后会进一步体会接口与回调的好处,这里举一个简单的例子:
package cahpter05;
//MyListener为事件处理接口,其中有specialProcessEvent方法,表示处理事件的方法
interface MyListener
{
void specialProcessEvent();
}
class Mymoniter
{
MyListener mylistener;
//注册监听器方法
public void regListener(MyListener ml)
{
this.mylistener=ml;
}
//事件处理方法
public void generalProcessEvent()
{
this.mylistener.specialProcessEvent();
}
}
//方式A实现MyListener接口
class WayA implements MyListener
{
public void specialProcessEvent()
{
System.out.println("采用A方式处理事件!");
}
}
//方式B实现MyListener接口
class WayB implements MyListener
{
public void specialProcessEvent()
{
System.out.println("采用B方式处理事件!");
}
}
public class Sample5_2
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
Mymoniter mm= new Mymoniter();
WayA wa=new WayA();
WayB wb=new WayB();
//注册A处理器
mm.regListener(wa);
//发送事件处理请求
mm.generalProcessEvent();
//注册B处理器
mm.regListener(wb);
//发送事件处理请求
mm.generalProcessEvent();
}
}
在上面的的例子中,MyMoniter是一个监控者,当有事件发生时,通知监控类(调用某generalProcessEvent方法)处理事件,而eneralProcessEvent方法调用注册到监控器的处理器中的specialProcessEvent方法来对具体事件处理。
MyMointer中regListener方法允许把不同处理器注册给监控者。Way与WayB是实现了事件处理接口的两个具体的处理器,分别对事件采用不同的处理方法。
由于两次事件处理前注册了不同的处理器实现,故两次事件处理执行的任务不同。而且如果有需要,可以实现更多不同的处理方式,提高了很高的灵活性。