回调

59 阅读3分钟

用审批流解释回调机制

什么是回调?

回调就像是你委托别人做事情,并告诉他们:"做完后请通知我"。

审批流中的回调例子

传统审批流程(无回调)

想象你提交了一份报销申请:

  1. 你提交申请
  2. 你每天登录系统查看审批状态
  3. 发现审批完成后,你才能进行下一步操作

缺点:你需要不断主动查询进度,浪费时间和精力。

使用回调的审批流程

现在,想象一个更智能的审批系统:

  1. 你提交申请,并留下你的联系方式(手机号/邮箱)
  2. 你告诉系统:"审批完成后请通知我"
  3. 你去做其他工作,不用反复查询
  4. 当审批完成时,系统自动发送消息通知你

优点:你不需要一直等待和查询,系统会在合适的时机主动通知你。

代码中的回调示例

传统方式(无回调)

public class 报销系统 {
    public static void main(String[] args) {
        // 提交申请
        String 申请单号 = 提交报销申请("张三", 1000);
        
        // 循环查询审批状态
        boolean 是否完成 = false;
        while (!是否完成) {
            是否完成 = 查询审批状态(申请单号);
            if (!是否完成) {
                System.out.println("审批还未完成,稍后再查...");
                // 等待一段时间
                try {
                    Thread.sleep(1000 * 60 * 60); // 每小时查询一次
                } catch (Exception e) {}
            }
        }
        
        // 审批完成后的操作
        System.out.println("审批已完成,可以去财务领钱了!");
    }
}

使用回调的方式

public class 报销系统 {
    public static void main(String[] args) {
        // 提交申请,并设置回调函数
        提交报销申请("张三", 1000, new 审批结果回调() {
            @Override
            public void 审批完成时(String 结果, String 意见) {
                if ("通过".equals(结果)) {
                    System.out.println("太好了!审批通过了,意见: " + 意见);
                    System.out.println("可以去财务领钱了!");
                } else {
                    System.out.println("审批被拒绝,意见: " + 意见);
                    System.out.println("需要修改申请后重新提交");
                }
            }
        });
        
        // 提交后可以立即去做其他事情
        System.out.println("申请已提交,我先去做其他工作了...");
    }
}

// 回调接口
interface 审批结果回调 {
    void 审批完成时(String 结果, String 意见);
}

回调的本质

  1. 委托任务:你把任务交给别人(系统)处理
  2. 提供联系方式:你告诉对方如何在特定情况下联系你(回调函数)
  3. 异步通知:当事件发生时,对方会按照你提供的方式通知你

生活中的回调例子

  • 快递服务:你下单后不用一直等在家门口,快递员到了会给你打电话
  • 餐厅取号:你取号后可以去逛街,到你的号码时餐厅会发短信通知你
  • 图书馆预约:你预约的书到了,图书馆会发邮件通知你去取

回调的优势

  1. 提高效率:不需要反复查询状态
  2. 降低耦合:提交方和处理方可以独立工作
  3. 事件驱动:只在需要的时候才执行相应代码
  4. 更好的用户体验:用户不需要等待或反复检查

回调机制让系统变得更加智能和高效,就像一个好助手,会在合适的时机主动告诉你重要的事情。