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

回顾接口回调:Interface CallBack 两种简单小思维

2016-09-13 09:33 387 查看
问题描述
写法1- 接口单独写

写法2-接口写在类中

今天又有一位高中同学,也可以算是刚接触Java的朋友问我一些问题,然后问到了接口回调,我就和他说明了,顺便有点时间,随手写了出来,希望简单的小案例能帮助到有需要的大家。

问题描述:

1.小王问小李问题;

2.小李一时回答不出来,需要计算

3.小王因为急着玩,问完就走了。

4.小李得出答案后就给小王答案。

写法1- 接口单独写:

1.接口 :CallBack.java

//接口,誰設置誰/直接调用(选择在哪执行)谁給出結果,誰實現誰得到結果。
public interface CallBack {
public void solve(String result);
}


2.Wang.java

//王得到答案
public class Wang implements CallBack {
Li li;

public Wang(Li li) {
this.li = li;
}

public void askQuestion(final int num) {
new Thread(new Runnable() {
@Override
public void run() {
li.executeMessage(Wang.this, num);
}
}).start();
//问完不管得到答案与否,马上玩耍去了
goPlay();
}

private void goPlay() {
System.out.println("问完问题,答案未知,玩去了...");
}

@Override
public void solve(String result) {
System.out.println("得到了答案 : " + result);
}
}


3.Li.java

public class Li {

public void executeMessage(CallBack callBack, int num) {
System.out.println("小王的问题是: "+num);

//模拟办事
int count = 0;
for (int i = 0; i < num; i++) {
if (i > 0 && i % 2 == 0) {
count++;
}
}

String reslut = "答案是"+count;

//得到答案,告诉小王
callBack.solve(reslut);
}
}


Test.java

public class Test {
public static void main(String[] args) {
Wang wang = new Wang(new Li());
wang.askQuestion(1000);
}
}


打印结果:

问完问题,答案未知,玩去了...
小王的问题是: 1000
得到了答案 : 答案是499


写法2-接口写在类中:

Wang.java

//王得到答案
public class Wang implements CallBack {
Li li;

public Wang(Li li) {
this.li = li;
}

public void askQuestion(final int num) {
//异步
new Thread(new Runnable() {
@Override
public void run() {
//先设回调,再到执行信息方法。
li.setCallBack(new Li.CallBack() {
@Override
public void solve(String result) {
System.out.println("得到了答案 : " + result);
}
});
//才再到执行方法。
li.executeMessage(num);
}
}).start();
//问完就玩耍,异步
goPlay();
}

private void goPlay() {
System.out.println("问完问题,答案未知,玩去了...");
}


Li.java

public class Li {

//public void executeMessage(CallBack callBack, int num),写在内部了,不用传过来。
public void executeMessage(int num) {
System.out.println("小王的要求数字是: " + num);

//模拟办事
int count = 0;
for (int i = 0; i < num; i++) {
if (i > 0 && i % 2 == 0) {
count++;
}
}

String reslut = "答案是" + count;

//接口方法在此执行:得到答案,告诉小王
callBack.solve(reslut);
}
//接口在内部写
public interface CallBack {
void solve(String result);
}

private CallBack callBack;

public void setCallBack(CallBack callBack) {
this.callBack = callBack;
}
}


Test.java

public class Test {
public static void main(String[] args) {
Wang wang = new Wang(new Li());
wang.askQuestion(1000);
}
}


输出结果:

问完问题,答案未知,玩去了...
小王的要求数字是: 1000
得到了答案 : 答案是499
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 接口回调 callback