一个欲儿的博客

一个欲儿的博客

回调
2025-07-01

1. 问题背景

假设现在有一个TaskProcessor类有100个任务要进行加工,加工完成以后,还有一个类ResultConsumer需要对你每一次的加工好的任务进行自己的业务逻辑处理怎么办?你可能会说,在TaskProcessor里面申明一个ResultConsumer类再每次加工完任务后就执行ResultConsumer类想执行的业务逻辑,可以解决问题吗?当然可以,但是这样会有几个问题

1. 耦合了TaskProcessor 要引入 ResultConsumer 耦合性高了

2. 不方便扩展 如果我还有一个类,也需要在TaskProcessor每加工完一个任务的时候进行自己的业务逻辑怎么办?

2. 回调

其实这很简单,比如说我可以在TaskProcessor每加工完一个任务的时候,把自己想给别人的信息通过函数传给其他类,其他类接收到了参数,就可以进行自己的业务逻辑了

3. 手搓代码

3.1 项目结构

image.png

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);  // 将回调传递给任务加工类
    }
}


发表评论: