您的位置:首页 > 其它

接口与回调

2016-01-21 23:25 351 查看
        回调是一种常见的程序设计模式,利用回调技术可以处理这样的问题,事件A发生时要执行处理事件A的代码,判断何时发生事件A及何时执行处理的代码。这些代码是固定,先行编写完毕,供使用。当事件A的处理代码开放给其他开发人员编写,可以有很多不同的实现,使用时可以注册具体需要的实现来处理。

       Java中Swing 与 AWT的事件监听处理模型就是使用接口与回调实现的。下面举一个简单的例子来说明这个问题。

//回调示例
//MyListener为事件处理接口,其中有specialProcessEvent方法,表示处理事件的方法
public interface MyListener{
void specialProcessEvent();
}
public class MyMoniter{
MyListener mylistener;
//注册监听器方法
public void regListener(MyListener ml){
this.mylistener = ml;
}
//事件处理方法
public void generalProcessEvent(){
this.mylistener.specialProcessEvent();
}
}
//方式A实现MyListener接口
public class WayA implements MyListener{
public void specialProcessEvent(){
System.out.println("我采用A方式处理事件!!!");
}
}
//方式B实现MyListener接口
public class WayB implements MyListener{
public void specialProcessEvent(){
System.out.println("我采用B方式处理事件!!!");
}
}

public class Sample5_3{
public static void main(String[] args){
//创建对象
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方法)处理事件,而generalProcessEvent方法调用注册到监控器的处理器中 specialProcessEvent 方法来对具体事件处理。

       MyMoniter中regListener方法允许把不同的处理器注册给监控者。WayA与WayB是实现了事件处理接口的两个具体的处理器,分别对事件采用不同的处理方法。

       有结果可以看出,由于两次事件处理前注册了不同的处理器实现,故两次事件处理执行具体任务不同。而且如果有需要,可以实现更多不同的处理方式,提供了很高的灵活性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: