回调概念
"回调,回调"到底是个啥呢?
通过以前的学习知道的是在事件驱动设计模式情况下,回调就是将一个方法的指针传递给事件源
当某一事件发生的时候就调用该方法,这个过程就称为回调,调用的方法就称为回调方法了。
不过我们知道的是java面向对象的程序设计并不支持方法指针,似乎难以实现?不过仔细想想就
可以其实就可以知道java可以使用接口这一技术来实现相同的回调嘛。
接口回调
java中接口回调其实现技巧就是定义一个简单的接口,并在接口中声明我们需要调用的方法。当某
一事件发生的时候我们就通过实现这个接口的方法进行回调,接口的这个方法也就是回调方法了。
只是说明很难让人理解,看看具体如何去实现吧!
接口回调简单实现
其实这在前一篇关于“匿名内部类”的思考中java接口回调就有使用过。
首先编写一个接口,并声明一些需要回调的方法
[java]
package com.kiritor;
/**@author Kiritor
* 事件接口*/
interface EventListener {
void clicked();
void pressed();
/*其他的就不多写了*/
}
package com.kiritor;
/**@author Kiritor
* 事件接口*/
interface EventListener {
void clicked();
void pressed();
/*其他的就不多写了*/
}
这里有时候接口的方法过多的话在使用内部类实现调用的时候会存在不便,因此编写一个
Adapter进行“适配”。
[java]
package com.kiritor;
/**
* @author Kiritor 事件监听的适配器
*/
public class EventAdapter implements EventListener {
@Override
public void clicked() {
// TODO Auto-generated method stub
}
public void pressed() {
};
}
package com.kiritor;
/**
* @author Kiritor 事件监听的适配器
*/
public class EventAdapter implements EventListener {
@Override
public void clicked() {
// TODO Auto-generated method stub
}
public void pressed() {
};
}
编写一个按钮类,它有添加监听的方法,也就是对按钮的状态改变的进行监听
并执行相关的动作!
[java]
package com.kiritor;
/**
* @author Kiritor 一个按钮
*/
public class MyButton {
private int flag = 0;// 0代表点击,1代表按下
public MyButton(int flag) {
this.flag = flag;
}
//对按钮添加监听
public void addListener(EventListener eventListener) {
if (flag == 0) {
eventListener.clicked();
} else
eventListener.pressed();
}
}
package com.kiritor;
/**
* @author Kiritor 一个按钮
*/
public class MyButton {
private int flag = 0;// 0代表点击,1代表按下
public MyButton(int flag) {
this.flag = flag;
}
//对按钮添加监听
public void addListener(EventListener eventListener) {
if (flag == 0) {
eventListener.clicked();
} else
eventListener.pressed();
}
} 看一看测试类:
[java]
package com.kiritor;
public class Test {
public static void main(String[] args) {
MyButton button = new MyButton(1);
//对按钮添加监听,采用的是Adapter的模式
button.addListener(new EventAdapter() {
@Override
public void clicked() {
// TODO Auto-generated method stub
System.out.println("按钮被点击了");
}
@Override
public void pressed() {
// TODO Auto-generated method stub
System.out.println("按钮被按下了");
}
});
}
}
package com.kiritor;
public class Test {
public static void main(String[] args) {
MyButton button = new MyButton(1);
//对按钮添加监听,采用的是Adapter的模式
button.addListener(new EventAdapter() {
@Override
public void clicked() {
// TODO Auto-generated method stub
System.out.println("按钮被点击了");
}
@Override
public void pressed() {
// TODO Auto-generated method stub
System.out.println("按钮被按下了");
}
});
}
}
上述代码基本上实现了java中aw