`
aliusa
  • 浏览: 82373 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JAVA 基础——Call Back Function

    博客分类:
  • Java
阅读更多
纯属转载:http://blog.csdn.net/giianhui/archive/2011/02/27/6211504.aspx
熟悉MS-Windows和X Windows事件驱动设计模式的开发人员,通常是把一个方法的指针传递给事件源,当某一事件发生时来调用这个方法(也称为“回调”)。Java的面向对象的模型目前不支持方法指针,似乎不能使用这种方便的机制。
回调函数 是由开发者自己编写,但不是给开发者自己调用。通常是用户通过把该方法的地址或者引用传递给系统调用者,系统在必要的时候(比如某事件发生)调用该开发者定义的方法。

例如, C++中模块 A有一个函数 foo,它向模块 B传递 foo的地址,然后在 B里面发生某种事件( event)时,通过从 A里面传递过来的 foo的地址调用 foo。
例如, java中, Class A中有一个函数 foo,它把 A的一个实例引用传递给 B(注入到 B),然后在 B里面发生某种事件( event)时,通过 A的实例去调用 foo。典型的例子就是观察者模式中的 update方法就是一个回调函数 。

Java支持interface,通过interface可以实现相同的回调。其诀窍就在于定义一个简单的interface,申明一个被希望回调的方法。



例子

FooBar

view plaincopy to clipboardprint?
public class FooBar {     
    // the instance of the callback      
    private ICallBack callBack = null;     
         
    /**   
     *    
     * @param callBack   
     */    
    public void setCallBack(ICallBack callBack){     
        this.callBack = callBack;     
    }     
         
    public void postExec() throws RuntimeException{     
        if(this.callBack == null)     
            throw new RuntimeException("the call back must be definded~");     
        this.callBack.postExec();     
    }     
}   
public class FooBar {  
    // the instance of the callback   
    private ICallBack callBack = null;  
      
    /** 
     *  
     * @param callBack 
     */ 
    public void setCallBack(ICallBack callBack){  
        this.callBack = callBack;  
    }  
      
    public void postExec() throws RuntimeException{  
        if(this.callBack == null)  
            throw new RuntimeException("the call back must be definded~");  
        this.callBack.postExec();  
    }  
}  

ICallBack

view plaincopy to clipboardprint?
public interface ICallBack {     
    void postExec();     
}   
public interface ICallBack {  
    void postExec();  





CallBack test

view plaincopy to clipboardprint?
public class Test {     
    public static void main(String[] args){     
        FooBar fooBar = new FooBar();     
        fooBar.setCallBack(new ICallBack(){ /** this is also be called anonymous Class**/      
    
            public void postExec() {     
                // TODO Auto-generated method stub     
                System.out.println("hello world by callback");     
            }     
                 
        });     
        fooBar.postExec();     
    }     
}   



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/giianhui/archive/2011/02/27/6211504.aspx
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics