Java回调简单理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34975710/article/details/76546372

1.回调简介

在编写程序时,不同模块之间总会存在一些相互调用,那java的回调简而言之就是类A中a()方法调用类B中b()方法,b()方法执行完后直接调用类A中callback()方法。
这里写图片描述

2.代码示例

情景一:

首先假定有一个Boss,他要自己完成一个项目,计算两个数相加的结果:

public class Boss {

    private int add(int x, int y) {
        int result = x + y;
        return result;
    }

    public void doWork(int x, int y) {
        int data = add(x,y);
        System.out.println("完成了,结果为" + data);
    }
}

自然这个项目很容易完成:

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Boss boss = new Boss();
        boss.doWork(1, 1);
    }

}
**运行结果:**
完成了,结果为2

情景二:

当然老板有更重要的是要做,像这类工作找个员工搞定就行,所以Boss把任务交给员工Worker,并且做完后告诉Boss。
Boss做如下更改:

public class Boss {

    // 发布任务
    public void assignTask(int x,int y,Worker worker){
        worker.doWork(x, y, this);
    }

    // 听取员工完成工作后的汇报
    public void listen(int result){
        System.out.println("嗯,我知道了结果为" + result + ",good job!");
    }

}

新增员工Worker类:

public class Worker {

    public void doWork(int x,int y,Boss boss){
        int result = x + y;
        System.out.println("亲爱的boss,我做完了~");
        // 员工向老板汇报
        boss.listen(result);
    }
}

测试如下:

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Boss boss = new Boss();
        Worker worker = new Worker();

        boss.assignTask(1, 1, worker);

    }

}
**运行结果:**
亲爱的boss,我做完了~
嗯,我知道了结果为2,good job!

在这里其实已经实现我们所说的回调,但是Worker的doWork(int x,int y,Boss boss)方法中第三个参数已经限定了该员工只能听取一个Boss的安排,如果老板娘安排工作那也是必须做的~所以回调一般是通过接口实现的。

通过接口:

新增一个接口,并把上面的代码做如下更改。
把需要回调的方法定义在接口中:

public interface CallBack {
    public abstract void listen(int result);
}

Boss类通过实现接口CallBack来继承并重写listen方法:

public class Boss implements CallBack {

    // 发布任务
    public void assignTask(int x, int y, Worker worker) {
        worker.finish(x, y, this);
    }

    // 听取员工完成工作后的汇报
    @Override
    public void listen(int result) {
        // TODO Auto-generated method stub
        System.out.println("嗯,我看到了结果为" + result + ",good job!");
    }

}

员工Worker中doWork(int x,int y,CallBack callBack)第三个参数更改CallBack,这样一来只要某一个类实现了CallBack接口都可调用该方法,所以老板娘安排工作也没问题了~

public class Worker {

    public void finish(int x,int y,CallBack callBack){
        int result = x + y;
        System.out.println("亲爱的Boss,我做完了");

        callBack.listen(result);
    }
}

我在新增一个老板娘Landlady:

public class Landlady implements CallBack {

    public void assignTask(int x, int y, Worker worker) {
        worker.finish(x, y, this);
    }

    @Override
    public void listen(int result) {
        // TODO Auto-generated method stub
        System.out.println("嗯,我看到了结果为" + result + ",小伙子干得漂亮!");
    }

}

测试如下:

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    Boss boss = new Boss();
        Landlady landlady = new Landlady();

        Worker worker = new Worker();

        boss.assignTask(1, 1, worker);
        landlady.assignTask(2, 2, worker);

    }

}
**运行结果:**
亲爱的Boss,我做完了
嗯,我看到了结果为2,good job!
亲爱的Boss,我做完了
嗯,我看到了结果为4,小伙子干得漂亮!

对于回调就简单介绍到这了。


生活不只是敲代码,如果你或你身边的人喜欢摄影或者生活的点点滴滴,可以关注下我亲爱的公众号~

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_34975710/article/details/76546372
今日推荐