Java回调函数的理解

通过一个例子来解释下什么是回调函数。

 

所谓回调,就是客户程序C去调用服务程序S的某个方法a,服务程序S又再调用客户程序的某个方法b,这时,对于客户程序C来说,b就是回调函数

 

由于C的方法b是给S调用的,服务程序要调用C的方法,当前服务程序S并不知道C的方法的名称,所以要定义C的方法规范,让C去实现

 

用一句通俗点的话说就是  “就是自己不想干活 还规定别人干活的思路”

 

代码示例

package com.demo;
//服务程序要调用C的方法,当前服务程序S并不知道C的方法的名称,所以要定义C的方法规范,让C去实现
interface inS{
    public void mether();
}
public class C implements inS{

    @Override
    public void mether() {
        // TODO Auto-generated method stub
        System.out.println("CCCC");
    }
    public static void main(String[] args) {
        //客户程序调用服务程序S的注释函数
        S s =  new S();
        s.setS(new C());
        
        //服务程序S又反过来调用客户程序C的方法mether
        //对于C来说,这个mether就是回调函数
        s.runM();
        
        
    }
    
}

class S{
    private inS ins;
    public void setS(inS s ){
        ins  = s;        
    }
    public void runM(){
        ins.mether();
    }
    
}

 

 

下面通过一个计算程序运行时间的示例来加深理解,通过回调函数,不需要更改计算程序的一行代码,只需要实现接口,复写要计算运行程序的方法代码就

可以了

package com.demo;


class CalcTime{
    private delayed dd;
    public void setDel(delayed dd){
        this.dd = dd;
    }
    public void runTime(){
        long startTime = System.currentTimeMillis();
        dd.delay();
        long endTime = System.currentTimeMillis();
        System.out.println(endTime-startTime);
    }
    
}

public class Demo01 implements delayed{
    public static void main(String[] args) {
        CalcTime c = new CalcTime();
        c.setDel(new Demo01());
        c.runTime();
    }

    @Override
    public void delay() {
        // TODO Auto-generated method stub
        for (int i = 0; i <999999999; i++) {
            for (int j = 0; j < 888888888; j++) {
                
            }
        }
    }
}
interface delayed{
    public void delay();
}

 

posted on 2014-04-21 20:46  为了这个家  阅读(130)  评论(0)    收藏  举报

导航