回调:
类A的a()方法调用类B的b()方法
类B的b()方法执行完毕主动调用类A的callback()方法假定领导安排给员工张三某工作,员工张三完成工作完成后通过约定好的方法告知领导,就是一个回调过程。
package com.xdja.callback;
/**
* 回调接口
* @date 20200710
* @author wly
*/
public interface Callback {
/**
* 当员工做完领导让他做的事后就通过该方法通知领导
* @param answer
*/
void reportWork(String answer);
}
package com.xdja.callback;
/**
* 传入一个员工类的对象和工作内容
* @param personnel
* @param work
*/
public class Manager implements Callback {
/**
* 传入一个员工类的对象
*/
public Manager(Personnel personnel, String work) {
personnel.arrangeTasks(this, work);
}
@Override
public void reportWork(String answer) {
/**
* 收到员工汇报结果
*/
System.out.println(answer);
}
}
package com.xdja.callback;
/**
* 员工接口
*/
public interface Personnel {
void arrangeTasks(Callback callback, String work);
}
package com.xdja.callback;
/**
* 员工对象张三 完成工作并汇报工作
*
* @author wly
*/
public class ZhangSan implements Personnel {
@Override
public void arrangeTasks(Callback callback, String work) {
try {
System.out.println("员工收到工作:" + work);
/**
* 工作中
*/
System.out.println("员工工作中......");
Thread.sleep(30000);
System.out.println("工作完成啦!");
} catch (InterruptedException e) {
}
callback.reportWork("员工张三汇报工作已完成。");
}
}
package com.xdja.callback;
/**
* @author wly
*/
public class Main {
/**
* 回调:
* 类Manager的Manager()方法调用类ZhangSan的arrangeTasks()方法
* ZhangSan的arrangeTasks()方法执行完毕主动调用类Manager的reportWork()方法
*
* @param args
*/
public static void main(String[] args) {
/**
* 举例:
* 将领导和员工都抽象成接口
* 具体到一个领导和一个员工张三
* 领导通过方法arrangeTasks给张三安排任务
* 领带提供方法reportWork 张三完成工作后通过该方法回复领导
* 张三调用reportWork回复领导汇报工作
*/
/**
* 工作任务
*/
String work = "整理本季度报表。";
/**
* 找到员工张三
*/
ZhangSan zhangSan = new ZhangSan();
/**
* 给员工安排任务
*/
System.out.println("领导安排张三" + work);
new Manager(zhangSan, work);
}
}
运行结果:
参考:https://blog.csdn.net/jiayi_yao/article/details/51046526