您的位置:首页 > 编程语言 > Java开发

java回调

2017-08-11 20:02 141 查看
回调的思想是:

类A的a()方法调用类B的b()方法

类B的b()方法执行完毕主动调用类A的callback()方法

也就是一种双向的调用方式。

代码模拟的是这样一种场景:老师问学生问题,学生思考完毕回答老师。

UML类图如下:



回调示意图如下:



java代码:

回调接口:

package demo6;

/**
*
* @ClassName: Callback
* @Description: 回调接口
* @author cheng
* @date 2017年8月11日 下午6:57:04
*/
public interface Callback {

/**
*
* @Title: answer
* @Description:回调函数
*/
void answer(String answer);

}


教师类:

package demo6;

/**
*
* @ClassName: Teacher
* @Description:教师
* @author cheng
* @date 2017年8月11日 下午6:58:50
*/
public class Teacher implements Callback {
//持有学生类的引用
private Student student;

public Teacher(Student student) {
this.student = student;
}

/**
*
* @Title: request
* @Description:问问题
*/
public void request() {
String question = "111 * 2 = ?";
student.think(this, question);
}

/**
* 收到答案
*/
@Override
public void answer(String answer) {
System.out.println("知道啦,你的答案是:" + answer);
}

}


学生类:

package demo6;

/**
*
* @ClassName: Student
* @Description:学生
* @author cheng
* @date 2017年8月11日 下午7:00:39
*/
public class Student {

/**
*
* @Title: think
* @Description: 思考
* @param callback
* @param question
*/
public void think(Callback callback, String question) {
System.out.println("老师你的问题是:" + question);
System.err.println("正在思考.............");
String answer = "222";
for (int i = 0; i < 1000000000; i++) {

}
//回调函数
callback.answer(answer);
}
}


测试:

package demo6;

/**
*
* @ClassName: ClientTest
* @Description: 测试
* @author cheng
* @date 2017年8月11日 下午7:06:51
*/
public class ClientTest {

public static void main(String[] args) {
Teacher teacher = new Teacher(new Student());
teacher.request();
}
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java回调