回调
2025-07-01
1. 问题背景
假设现在有一个TaskProcessor类有100个任务要进行加工,加工完成以后,还有一个类ResultConsumer需要对你每一次的加工好的任务进行自己的业务逻辑处理怎么办?你可能会说,在TaskProcessor里面申明一个ResultConsumer类再每次加工完任务后就执行ResultConsumer类想执行的业务逻辑,可以解决问题吗?当然可以,但是这样会有几个问题
1. 耦合了TaskProcessor 要引入 ResultConsumer 耦合性高了
2. 不方便扩展 如果我还有一个类,也需要在TaskProcessor每加工完一个任务的时候进行自己的业务逻辑怎么办?
2. 回调
其实这很简单,比如说我可以在TaskProcessor每加工完一个任务的时候,把自己想给别人的信息通过函数传给其他类,其他类接收到了参数,就可以进行自己的业务逻辑了
3. 手搓代码
3.1 项目结构
3.2 TaskCallback
public interface TaskCallback { void onTaskProcessing(int progress); // 回调方法:报告任务进度 void onTaskCompleted(String result); // 回调方法:任务完成 }
3.3 ResultConsumer
public class ResultConsumer implements TaskCallback{ private String MyBussiness = "消费一个你加工的任务:"; @Override public void onTaskProcessing(int progress) { System.out.println(this.MyBussiness + progress); } @Override public void onTaskCompleted(String result) { } }
3.4 TaskProcessor
public class TaskProcessor { public void processTask(TaskCallback callback) { // 模拟任务加工:循环 1 到 100 System.out.println("任务开始加工..."); for (int i = 1; i <= 100; i++) { // 每次循环时,报告任务加工进度 callback.onTaskProcessing(i); // 调用回调函数报告进度 } // 任务加工完成后,调用回调方法 callback.onTaskCompleted("任务加工完成!"); } }
3.5 Main
public class Main { public static void main(String[] args) { TaskProcessor processor = new TaskProcessor(); // 创建回调实现对象 TaskCallback callback = new ResultConsumer(); // 提供回调函数 processor.processTask(callback); // 将回调传递给任务加工类 } }
发表评论: