回调机制

所谓回调,就是客户程序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());  
       
    }  
}

 

posted on 2016-11-23 15:21  我叫涛哥  阅读(118)  评论(0)    收藏  举报

导航