Java:案例理解-接口回调
接口回调的设计在实际应用中很多,其概念单从文字角度比较难以理解
那么下面就一个简单的实际应用案例理解
建议:
跟着动手敲一敲,画调用关系图,然后看注释反复理解
案例要求:
岳老板命令出去司机去修车,
期间岳老板忙自己的事,
司机修车完成后给岳老板报告;
代码实现:
回调接口
/**
* 回调函数接口
*/
public interface CallBack {
/**
* 报告方法,
* 这就是回调方法
* 当司机修完车会主动调用这个方法,给老板报告
* 为什么是回调?
* 老板继承CallBack接口
* 这个report()方法属于老板
* 老板命令司机做事,调用司机的修车方法,司机做完事会反过来调用老板的方法进行报告,老板反过来被调用的方法就是“回调方法”
* 这就是回调
* 你给别人发短信,别人收到短信通过你的手机号给你回复,你的手机号就是回调方法,收发需要通过手机号
* @param str
*/
public void report(String str);
}
老板类
/**
* 老板类
* 老板只有继承了回调接口,才可以使用回调的方法
*/
public class Boss implements CallBack {
/**
* private Driver driver;这个理解为:
* 你要调用司机的修车方法,你得有司机的对象,不然无法调用
*/
private Driver driver;
public Boss(Driver driver){
this.driver=driver;
}
/**
* 修车方法
* 老板通过此方法命令司机去修车
*/
public void orderFix(){
System.out.println("岳老板嘱咐司机去修车");
//新建一个线程,调用司机修车方法,
// 现实理解是:不干扰老板的线程,老板要继续做自己的事情
new Thread(()->driver.FixCar(this)).start();
}
/**
* 这是回调方法,属于老板
* 司机修完车会调用这个方法
* @param str
*/
@Override
public void report(String str) {
System.out.println(str);
}
public void doOther(){
System.out.println("岳老板去做自己的其他事情了。。。。。。。。。。。");
}
}
司机类
/**
* 司机类
*/
public class Driver {
/**
* 司机修车方法
* 回调接口作为参数
* 目的是为了调用回调方法,给老板报告
* @param callBack
*/
public void FixCar(CallBack callBack){
try {
//线程休眠,模拟修车过程
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//修车完成后,调用回调方法,通知老板车修好了
callBack.report("司机报告:老板,车给你修好了,我先溜了溜了");
}
}
测试类
/**
* 测试类
*/
public class TestDemo {
public static void main(String[] args) {
Driver driver=new Driver();
Boss yue=new Boss(driver);
//命令司机去修车,修好了给老板报告
yue.orderFix();
//老板忙自己的事情
yue.doOther();
}
}
运行结果:
岳老板嘱咐司机去修车
岳老板去做自己的其他事情了。。。。。。。。。。。
(司机修车的过程。。。。。)
司机报告:老板,车给你修好了,我先溜了溜了
转载:https://blog.csdn.net/qq_43137699/article/details/111181206
查看评论