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();}@Overridepublic 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();}
}
最终结果
此案例体会出来的思想是不仅仅是回调,而是异步+回调,同步的思想就是项目经理必须等待员工做完任务才去干别的,异步就是经理把任务交给员工后立刻去做别的,员工完成任务就立马通知经理,经理处理完还是继续去做其它事;
java回调函数(全干货)相关推荐
- Java 回调函数的理解
以下是我对java回调函数的理解,希望对各位有帮助. 简而言之,假设有两个类A与B,还有一个回调接口C(有一个c方法).其中A类持有一个B类对象作为属性和拥有一个a方法,并实现了接口C,所以A类中就有 ...
- [实战]java回调函数
下面使用java回调函数来实现一个测试函数运行时间的工具类: 如果我们要测试一个类的方法的执行时间,通常我们会这样做: java 代码 public class TestObject { /** ...
- java反射回调函数_用J2V8注册Java回调函数
J2V8是一套针对谷歌的V8 JavaScript引擎的Java绑定.J2V8的开发为Android平台带来了高效的Javascript的执行环境,taris.js 就是基于J2V8开发的.J2V8同 ...
- Java回调函数理解和应用
#Java回调函数理解和应用 所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是不是有点晕晕的. 在未理解之前,我也是一脸懵逼,等我理 ...
- Java 回调函数详解及使用
Java 回调函数详解 前言: C语言中回调函数解释: 回调函数(Callback Function)是怎样一种函数呢? 函数是用来被调用的,我们调用函数的方法有两种: 直接调用:在函数A的函数体里通 ...
- Java 回调函数(传统方法和lambda方法)-一个例子秒懂
原文地址为: Java 回调函数(传统方法和lambda方法)-一个例子秒懂 背景: 想写一个工具类 Tool.java ,其中方法 public void readOneLine() 负责一行一行地 ...
- java回调函数_PHP回调函数及匿名函数概念与用法详解
1.回调函数 PHP的回调函数其实和C.Java等语言的回调函数的作用是一模一样的,都是在主线程执行的过程中,突然跳去执行设置的回调函数: 回调函数执行完毕之后,再回到主线程处理接下来的流程 而在ph ...
- Java回调函数的理解
所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数.例如Win32下的窗口过程函数就是一个典型的回调函数.一般说来,C ...
- Java回调函数使用
C语言中回调函数解释: 回调函数(Callback Function)是怎样一种函数呢? 函数是用来被调用的,我们调用函数的方法有两种: l 直接调用:在函数A的函数体里通过书写函数B ...
- java回调函数 final_java中带回调函数的字符串替换,类似js中的replace(rgExp,function)...
在js中, replace函数的功能很强大,其原型是stringObj.replace(rgExp, replaceText), 而replaceText也可以是返回替换文本的函数.这个功能还是比较好 ...
最新文章
- 【Android 安全】DEX 加密 ( 阶段总结 | 主应用 | 代理 Application | Java 工具 | 代码示例 ) ★
- java实现HTML转PDF
- maven 和eclipse插件
- Python 2.7 将于7个月后终结,这是你需要了解的3.X炫酷新特性
- Leetcode--236. 二叉树的最近公共祖先(Java)
- 目标检测网络中的 bottom-up 和 top-down理解
- 史上最全数据库中间件详解
- android 系统(99)---MTK 平台系统重启分类
- 51NOD-1029 大数除法【大数】
- linux下的工作目录切换实现
- 阿里云用域名、ip访问不了网站
- Android广告的Activity收集
- 多变量微积分笔记(1)——向量和矩阵
- 89年女孩,工作在上海征婚
- 在pcb布线中,要使拐角成圆弧形,应该怎么设置
- Inventor冲压加强筋_inventor 加强筋教程
- 基于文本内容理解的中医药数据基础研究——中医药文献语料库的建设
- UESTC - 1057 秋实大哥与花 线段树
- 假定主存地址位数为32位,按字节编址,主存和cache之间采用直接映射方式,主存块大小为1个字,每字32位,写操作时采用直写(Write Throght)方式,则能存放32K字数据的cache的总容量
- 新来CTO 强烈禁止使用Calendar...,那用啥?