回调机制
所谓回调,就是客户程序C调用服务程序S中的某个方法a,然后S又在某个时候反过来调用C中的某个方法b,对于C来说,这个b便叫做回调函数。
一般说来,C不会自己调用b,C提供b的目的就是让S来调用它,而且是C不得不提供。由于S并不知道C提供的b叫甚名谁,所以S会约定b的接口规范(函数原型),然后由C提前通过S的一个函数r告诉S自己将要使用b函数,这个过程称为回调函数的注册,r称为注册函数。
public interface ICallBack { // 需要回调的方法 public void postExec(); } /** * FooBar并没有实现接口,但通过“组合聚合原则”,取得了 一个接口对象,而此对象是其他类调用FooBar的setCallBack方法 * 时候传给FooBar的。因此可以在业务需要的地方来调用实现接口的 类里面的方法 */ public class FooBar { //组合聚合原则 相当于s private ICallBack callBack; public void setCallBack(ICallBack callBack) { this.callBack = callBack; doSth(); } /**业务需要的时候,通过委派,来调用实现类的具体方法 */ public void doSth() { callBack.postExec(); } } 第二个类在测试类里面,是一个匿名类: public class Test { //new ICallBack() 相当于c public static void main(String[] args) { FooBar foo = new FooBar(); foo.setCallBack(new ICallBack() { public void postExec() { System.out.println("在Test类中实现但不能被Test的对象引用,而由FooBar对象调用"); } }); } } 也可以这样写: public class myCallBack implements ICallBack { public void postExec() { System.out.println("在Test类中实现但不能被Test的对象引用,而由FooBar对象调用"); } //new ICallBack() 相当于c public static void main(String[] args) { FooBar foo = new FooBar(); foo.setCallBack(new myCallBack()); } }
浙公网安备 33010602011771号