接口与回调
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是实现了事件处理接口的两个具体的处理器,分别对事件采用不同的处理方法。
有结果可以看出,由于两次事件处理前注册了不同的处理器实现,故两次事件处理执行具体任务不同。而且如果有需要,可以实现更多不同的处理方式,提供了很高的灵活性。
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是实现了事件处理接口的两个具体的处理器,分别对事件采用不同的处理方法。
有结果可以看出,由于两次事件处理前注册了不同的处理器实现,故两次事件处理执行具体任务不同。而且如果有需要,可以实现更多不同的处理方式,提供了很高的灵活性。
相关文章推荐
- Mac系统输入英文时如何去掉自动提示
- 基于三台主机的LAMP,httpd,php-fpm,mariadb,WordPress,phpMyAdmin
- 搞懂 SynchronizationContext(第一部分)【翻译】
- MySQL 导出数据保存到文件中
- QT中实现托盘
- 数据结构及算法——求链式表的长度(C语言)
- 2015总结和2016计划
- python核心编程-第一个GUI程序
- mysql mysqldump 命令导出指定表的数据
- Activity的生命周期分析
- Linux 性能监控 —— 磁盘 I/O
- HTML5新特性之WebSocket
- JVM内存管理笔记
- 1.2 控制器 view 的创建和加载
- oracle insert用法总结
- 数组操作及练习
- Scaner VS bufferedReader
- 前端零基础入门
- 最长上升连续子序列
- php中括号定义数组