回调的思想是:
类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();
}
}
运行结果: