Java 回调与委派机制
来源:互联网 发布:python configobj 编辑:程序博客网 时间:2024/05/17 03:04
委派,从字面上来理解的话,应该是委托其他类做事情而自己不做或者只做一部分工作;而回调,就是调用自己的方法。
这两种机制很类似,你姑且可以认为它们就是一码事。
java 中,实现委派和回调都是通过接口来实现的。下面举个小例子吧!
该例子是这样的(只是一个例子):
ProfessionalWorker 、SparetimeWorker 负责发射 Rocket,Rocket 类通过接口 IRocketDelegate 委派(或者说是回调) ProfessionalWorker 、SparetimeWorker自己发射。
总之,Rocket不做具体的事情。看实例代码:
IRocketDelegate.java源码
- package mark.zhang;
- public interface IRocketDelegate {
- public abstract long startAtTime();
- public abstract long endAtTime();
- public abstract void sendDidFail();
- }
Rocket.java源码
- package mark.zhang;
- public class Rocket {
- IRocketDelegate delegate = null;
- public Rocket(IRocketDelegate delegate) {
- this.delegate = delegate;
- }
- private long getRocketStartTime() {
- long startTime = delegate.startAtTime();
- return startTime;
- }
- private long getRocketEndTime() {
- long endTime = delegate.endAtTime();
- return endTime;
- }
- public boolean isOk() {
- // 超时0.1秒为失败
- if (getRocketEndTime() - getRocketStartTime() >= 100) {
- delegate.sendDidFail();
- return false;
- }
- return true;
- }
- }
那么,我们就把这些实现工作交给具体的发射者来完成。实现回调。
ProfessionalWorker.java源码
- package mark.zhang;
- public class ProfessionalWorker implements IRocketDelegate {
- @Override
- public long startAtTime() {
- System.out.println("startAtTime is call-back inProfessionalWorker!");
- return System.currentTimeMillis();
- }
- @Override
- public long endAtTime() {
- System.out.println("endAtTime is call-back in ProfessionalWorker!");
- return System.currentTimeMillis();
- }
- @Override
- public void sendDidFail() {
- System.out.println("ProfessionalWorker send Rocket fail !");
- }
- public void send() {
- if (new Rocket(this).isOk()) {
- System.out.println("ProfessionalWorker send Rocket ok !");
- }
- }
- }
- package mark.zhang;
- public class SparetimeWorker {
- public void send() {
- boolean isOk = new Rocket(new IRocketDelegate() {
- @Override
- public long startAtTime() {
- System.out.println("startAtTime is call-back in SparetimeWorker !");
- return System.currentTimeMillis();
- }
- @Override
- public long endAtTime() {
- System.out.println("endAtTime is call-back in SparetimeWorker!");
- return System.currentTimeMillis() + 100L;
- }
- @Override
- public void sendDidFail() {
- System.out.println("SparetimeWorker send Rocket fail !");
- }
- }).isOk();
- if(isOk) {
- System.out.println("SparetimeWorker send Rocket ok !");
- }
- }
- }
Test.java
- package mark.zhang;
- public class Test {
- public static void main(String[] args) {
- new ProfessionalWorker().send();
- System.out.println("*********************************************");
- new SparetimeWorker().send();
- }
- }
- endAtTime is call-back in ProfessionalWorker!
- startAtTime is call-back inProfessionalWorker!
- ProfessionalWorker send Rocket ok !
- *********************************************
- endAtTime is call-back in SparetimeWorker!
- startAtTime is call-back in SparetimeWorker !
- SparetimeWorker send Rocket fail !
这就体现 Java 中的一句话 Don't call me,I'll call you. 其含义就是回调(或者委派)。
Android 中很多这样的用法,关于接口的好处还有很多,后续慢慢研究,记住一句话:面向对象面向接口编程。
- Java 回调与委派机制
- Java 回调与委派机制
- java 回调与委派/委托机制
- design principle:java 回调与委派/委托机制
- design principle:java 回调与委派/委托机制
- design principle:java 回调与委派/委托机制
- Java双亲委派机制
- Java类加载器与双亲委派机制
- Java--双亲委派机制&类加载机制
- JVM中的类加载器与双亲委派机制
- Java类加载双亲委派机制的一点思考
- Java中自定义类加载器(双亲委派机制)
- java jvm 类加载机制 双亲委派模型
- java类加载器以及双亲委派机制
- 双亲委派机制总结
- 双亲委派机制
- 双亲委派机制
- 双亲委派机制
- windows核心编程心解--进程相关
- 第十三周上机任务项目1-Fibnacci序列(迭代)
- c\c++二维数组动态分配和释放
- 什么是元数据(MetaData)
- 从def中获得lib文件
- Java 回调与委派机制
- android view 相关方法 layout draw 布局 重绘
- 基于手机端的常见轻量级服务器通信架构
- 如何查看sybase存储过程的内容?
- dll添加.def文件与直接在需要导出的函数定义处指定_declspec( dllexport )有区别吗?
- C# 多线程实现ProgressBar效果
- Java动态代理学习2——静态代理和动态代理并对照spring的通知
- 分段函数
- jquery ajax return没有返回值的解决方法,需要的朋友可以参考下。