原理图:
代码
//首先是接口部分:
package mechanism;
public interface ICallBack {
public abstract void doSomething();
}
package mechanism;
public interface ICallee {
public abstract String askforCallback();
public abstract void setCallback(ICallBack callback);
}
//然后是实现部分:
package mechanism;
public class CallBack implements ICallBack{
@Override
public void doSomething() {
System.out.println("do something useful in callback");
}
}
package mechanism;
public class Callee1 implements ICallee {
private ICallBack callback;
@Override
public void setCallback(ICallBack callback) {
this.callback = callback;
}
@Override
public String askforCallback() {
System.out.println("pre operations before invoke callback");
callback.doSomething();
System.out.println("post operations after invoke callback");
String result = "function execute success, ruturn result";
return result;
}
}
package mechanism;
public class Caller {
private ICallee callee;
public void setCallee(ICallee callee) {
this.callee = callee;
}
public void bindCallBacktoCallee(ICallBack callback) {
callee.setCallback(callback);
}
public void executeTask() {
System.out.println("pre task analysis");
System.out.println("doing part of task");
//excute one function
String result = callee.askforCallback();
System.out.println("post operation as respond to callee's result");
System.out.println("complete the task");
}
}
//测试:
package mechanism;
public class Test {
public static void main(String[] args) {
System.out.println("main flow : some operations before using Caller");
ICallee callee1 = new Callee1();
//由Caller完成Callback与Callee的绑定,从而将Callback的执行
//委托给Callee
//先分配资源
Caller caller = new Caller();
ICallBack callback = new CallBack();
//再完成配置工作
caller.setCallee(callee1);
caller.bindCallBacktoCallee(callback);
//然后就可以运行了
caller.executeTask();
}
}