java回调函数(全干货)

产生接口回调的场景

产生接口回调的场景很简单,比如A叫B帮忙做一件事,交代完后A去忙别的事,然后B做完这件事之后会通知A,
通知A的这个动作就是接口回调的动作。

接口回调

接口回调的意义是通过接口来实现解耦的的前提下调用另一个类的方法,也就是B为A准备一个callback回调方法,然后B把任务丢给A,
A做完任务然后通过调用B的方法callback

#以下的解释如果不精通设计模式就不易理解,请配合代码一起看
传统情况下,B要调用A的方法,那么B和A就应该是组合关系或者聚合是组合关系,但这样耦合度就确实很高,如何解耦呢?创建一个
函数型接口Task里面只有一个抽象方法就是callback,然后将B作为Task接口实现类重写callback后,将task引用作为参数来完成解耦

1、通过Task接口完成解耦

public interface Task {
    public void callback(String result);
}

2、定义Manger经理类,如下manager对象和employee对象就是聚合的关系,也就manager通过setter设置employee的值。同理,如果manager通过构造器来设置employee的值那就是组合关系,耦合度组合 > 聚合。

package com.sobot.demo4.callback;

public class Manager implements Task{

    private Employee employee;

    public void setEmployee(Employee employee) {
        this.employee = employee;
    }

    public void doOther() {
        System.out.println("项目经理去做别的了");
    }

    public void doOtherContinue() {
        System.out.println("项目经理收到员工信息后继续去做别的了");
    }
    
    //这是整个小项目需要做的事
    public void setTask(){
        System.out.println("经理给员工布置任务");
        doOther();
        //员工完成经理布置的任务(含有回调方法)
        employee.doTask(this);
        doOtherContinue();
    }

    @Override
    public void callback(String result) {
        System.out.println("收到员工处理结果" +result);
    }
}

3 真正解耦的是这里,这里没有出现任何的聚合或耦合关系原因是利用了多态的特征

package com.sobot.demo4.callback;

public class Employee {

    public void doTask(Task task){
        try {
            System.out.println("Employee开始执行任务");
            //模拟情景是员工完成任务花费了5秒钟
            Thread.sleep(5000);
            System.out.println("Employee处理完这项任务了");
            //员工干完活后通知经理任务已完成
            task.callback("finish");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

4 测试

public class Client {
    public static void main(String[] args) {
        Employee employee = new Employee();
        Manager manager = new Manager();
        manager.setEmployee(employee);
        manager.setTask();
    }
}

最终结果
在这里插入图片描述
此案例体会出来的思想是不仅仅是回调,而是异步+回调,同步的思想就是项目经理必须等待员工做完任务才去干别的,异步就是经理把任务交给员工后立刻去做别的,员工完成任务就立马通知经理,经理处理完还是继续去做其它事;

  • 9
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值