自己对回调函数的理解:
首先顶一个回调函数的接口:
/**
*
- @author dch
*/
//定义一个回调函数的接口
public interface ICallback {
//定义一个方法
public void service();
}
/**
*
- @author dch
*/
//定义一个类来实现回调接口
public class Method1 implements ICallback {
@Override
//重写接口的方法
public void service() {
// TODO Auto-generated method stub
System.out.println("男老板说:我知道了,你可以休息了!");
}
}
/**
*
- @author dch
*/
//定义第二个类来实现回调接口
public class Method2 implements ICallback{
@Override
public void service() {
// TODO Auto-generated method stub
System.out.println("女老板说:我知道了,你下班吧!");
}
}
定义一个控制器:
import java.util.Scanner;
/**
*
- @author dch
*/
//定义一个控制器
public class Controller {
//定义需要调用对象的引用,通常用接口
private ICallback iCallback = null;
//有参构造器
public Controller(ICallback iCallback){
this.iCallback = iCallback;
}
public void showInfo(){
//当满足条件是.调用接口的方法
Scanner sc = new Scanner(System.in);
System.out.println("0:报告男老板我做完了, 1:报告女老板我做完了");
String type = sc.nextLine();
System.out.println(type);
if(type.equals("0")){
iCallback.service();
}else{
iCallback.service();
}
}
}
测试类:
/**
*
- @author dch
*/
//测试类
public class Test {
public static void main(String[] args) {
Controller controller =new Controller(new Method1());
controller.showInfo();
Controller controller2 = new Controller(new Method2());
controller2.showInfo();
System.out.println();
System.out.println("我任务完成了");
System.out.println();
//员工不知道这个老板的名字
ICallback nullname = new ICallback() {
@Override
public void service() {
// TODO Auto-generated method stub
System.out.println("辛苦了,你可以下班了,一路小心!");
}
};
nullname.service();
}
/*
* 回调函数的理解:
*
*首先定义一个回调方法的接口,是为了完后任务后,能再一次告诉布置任务的人;
*这里的method1指的就是老板1,method2指的就是老板2....,依次类推
*Controller类中
*首先不管什么对象创建,进来后都变成接口对象,所以先创建了私有的成员变量ICallback
*也就是用到了构造器,传进来的对象都变成接口的实现类对象,
*当然我们知道接口是不能new(创建对象)的,但是实现接口的类,却是可以new的,
*从而返回到你自己想返回的老板手中,如果就一个老板,那么就一个,如果有多个,就在判断.
*例如这个代码
*Controller controller =new Controller(new Method1());
*其实这个就是接口对象,只不过我说的接口对象指的是实现接口的Method1类所实例化的对象
*可以理解为
*Method1 contriller = new Method1();
*这里就是工作完成后告诉老板1,
*这时候我们就能调用方法,因为此时我们有了对象
*controller.showInfo();
*调用的过程:
*public void showInfo(){
*
*员工工作
*iCallback.service();//回调了
*}
*public void service() {
// TODO Auto-generated method stub
System.out.println("男老板说:我知道了,你可以休息了!");
}
*输出:男老板说:我知道了,你可以休息了!
*这样实现了回调,员工在完成任务后,又能告诉老板,老板不仅知道了,还给了反馈.
*
*思考:
*如果员工完成任务后,不知道要把完成的消息给谁,
*这里是不是可以来个匿名类,
*反正无论是谁都只是要接收到员工完成任务这一个方法.
*
*/
}