回调函数(CallBack)

回调函数(CallBack)

1. 定义


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数组定义</title>
    <script type="text/javascript">
        //  先定义一个函数,用来做短时间无法脱身的事情,这时同步
        function sdo(does){
            console.log(does);
        }
        //  再定义一个函数,用来做长时间等待,可以脱身的事情,这就是异步
        function ldo(doing){
            setTimeout(() => {
                console.log(doing);
            }, 1000)
        }
        //  接下来我们要做的事情是这样子的
        sdo('买鸡');
        sdo('杀鸡');
        ldo('炖鸡');
        sdo('吃鸡');
    </script>
</head>
<body>

</body>
</html>


发现结果异常:

我们使用回调函数来解决

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数组定义</title>
    <script type="text/javascript">
        //  先定义一个函数,用来做短时间无法脱身的事情,这时同步
        function sdo(does){
            console.log(does);
        }
        //  再定义一个函数,用来做长时间等待,可以脱身的事情,这就是异步
        function ldo(doing, callback){
            setTimeout(() => {
                console.log(doing);
                callback('吃鸡');
            }, 1000)
        }
        //  接下来我们要做的事情是这样子的
        sdo('买鸡');
        sdo('杀鸡');
        ldo('炖鸡', sdo);
        //  而且最重要的是:可以在炖鸡的时间做很多事情
        sdo('玩手机');
        sdo('看电视');
        sdo('思考人生');
    </script>
</head>
<body>

</body>
</html>

2. C++ 中的应用

回调函数是编程中的一种设计模式,它允许你将一个函数作为参数传递给另一个函数,以便在某个特定的事件或条件下调用它。这种模式在处理异步操作或事件驱动编程时非常有用。

#include <iostream>
using namespace std;

// 定义一个回调函数类型
//  1. void:函数返回类型
//  2. (*CallbackFunction): 声明一个名为 CallbackFunction 的指针。
//  3. (int): 函数参数列表,这里的函数接受一个int类型的参数
//  typedef是C/C++中的一个关键字,用于给一个现有的类型定义一个新的名字。
//  通过typedef,我们可以创建一个更易读的类型别名。
typedef void (*CallbackFunction)(int);  //  定义好函数指针类型后,可以更方便地声明和使用函数指针:

// 回调函数
void myCallback(int x) {
    cout << "Callback called with value: " << x << endl;
}

// 触发回调的函数
void registerCallback(CallbackFunction callback, int value) {
    // 模拟一些处理
    cout << "Processing..." << endl;
    // 调用回调函数
    callback(value);
}

int main() {
    // 注册回调函数
    registerCallback(myCallback, 42);
    return 0;
}

3. Java 中通常使用接口实现回调机制

package callback;
// 定义回调接口
public interface Callback {
    void onCallback(String message);
}
package callback;

/**
 * @Author: Ronnie LEE
 * @Date: 2024/7/19 - 07 - 19 - 0:44
 * @Description: callback
 * @version: 1.0
 */
public class Main {
    public static void main(String[] args) {
        new Processor().registerCallback(new MyCall());
    }
}

//  实现回调接口
class MyCall implements Callback{
    @Override
    public void onCallback(String message) {
        System.out.println("Callback called with message: " + message);
    }
}

//  触发回调的类
class Processor {
    public void registerCallback(Callback callback) {
        // 模拟一些处理
        System.out.println("Processing...");
        // 调用回调函数
        callback.onCallback("Hello, world!");
    }
}
posted @ 2024-07-19 00:26  爱新觉罗LQ  阅读(22)  评论(0编辑  收藏  举报