有一个interface的项目,现在需要处理。老板对这个项目很有经验,心里有自己的处理方法。老板有个得力员工A(Callee),他知道老板以前处理过这个项目,员工A知道老板的处理方法(doProject),同时员工A自己也了解该项目的内容(这里需要用内部类实现接口!)。但是老板想提拔自己的员工B(小舅子Caller),员工B和员工A关系也很好,两人在交谈中,A告诉B方案(此处获取引用地址),最后B回调A:
void go(){ callbackReference.doProject(); }
public class CallBacks {
public static void main(String[] args) {
Callee c = new Callee();
//员工B获得了员工A的方案
Caller caller = new Caller(c.getCallbackReference());//获取引用地址
caller.go();
caller.go();
}
}
//项目
interface Project{
void doProject();
}
//老板
class Boss{
public void doProject(){System.out.println("other operation");}
}
//员工A(得力助手)
class Callee extends Boss{
private int i = 0;
public void doProject(){
super.doProject();
i++;
System.out.println(i);
}
//内部类实现的方案
private class Inner implements Project{
public void doProject() {
Callee.this.doProject();
}
}
//获取回调引用地址
Project getCallbackReference(){
return new Inner();
}
}
//员工B(小舅子)
class Caller{
private Project callbackReference;
Caller(Project cb){ callbackReference = cb; }
void go(){ callbackReference.doProject(); }//此处回调
}
补充说明:例子半取材于Java编程思想,另外回调的价值在于它的灵活性,可以在运行时动态决定需要调用什么方法,有时间再补充。