您的位置:首页 > 编程语言 > Java开发

Java回调简单理解

2017-08-01 17:00 471 查看

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,小伙子干得漂亮!


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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: