回调(callback)机制
来源:互联网 发布:js生成随机数 编辑:程序博客网 时间:2024/05/23 15:49
一. 前言
回调(callBack)是使用频率非常高的一种编程技巧,它是2个对象间通信的一个手段.曾经看到知乎上一个比较浅显易懂的说法:
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。回答完毕。 (链接:https://www.zhihu.com/question/19801131)
二. 分析问题
现在写个小程序来实践下.分析下这个问题,可以看到:
对象:PersonA(店员), PersonB(我)
分别拥有啥和干了啥: PersonB(我): 有一个作为回调函数的号码,一个注册函数.
PersonA(店员): 等待货物的到来,货物来了回调回调函数.
对象:PersonA(店员), PersonB(我)
分别拥有啥和干了啥: PersonB(我): 有一个作为回调函数的号码,一个注册函数.
PersonA(店员): 等待货物的到来,货物来了回调回调函数.
三. 解决问题
这里我们用,回调接口来实现回调函数,以它来作为二者的桥梁。用java语言,在android studio 上实现,首先写一个接口类CallBack.java,其内容为:package com.example.test;public interface CallBack { void onCallBack();}
然后,我们实现PersonB.java类.其主要任务为2个,其一,定义和new一个回调函数对象,其二,把这个对象注册到PersonA当中去.
package com.example.test;public class PersonB { private String name; public MCallBack mCallBack; private boolean haveGoods = true; public PersonB(String str){ name = str; mCallBack = new MCallBack(); } public class MCallBack implements CallBack{ @Override public void onCallBack() { System.out.println("PersonA: PersonB,Your goods has arrived! "); } } public void testCallBack(){ System.out.println("PersonB: PersonA, Call me if you have goods!"); new PersonA("PersonA").notifyIfGoodsArrived(haveGoods,mCallBack); }}
接下来实现PersonA.java为,其主要任务也为2个,其一为完成PersonB交代的任务(这里开启一个线程睡3s来模拟这个任务), 其二,完成任务后,通过收到的回调接口(来之PersonB)通知PersonB:
package com.example.test;public class PersonA { public String name; public PersonA(String str){ name = str; } public void notifyIfGoodsArrived(final boolean haveGoods, final CallBack mCallBack){ if (haveGoods){ //start the task to wait for the goods. new Thread(){ @Override public void run() { try{ //Suppose the goods come after 3 seconds. sleep(3000); } catch(InterruptedException e){ e.printStackTrace(); } mCallBack.onCallBack(); } }.start(); } }}
最后编写一个测试类MyClass.java
package com.example.test;public class myClass { public static void main(String[] args){ new PersonB("PersonB").testCallBack(); }}
测试结果:
PersonB: PersonA, Call me if you have goods!PersonA: PersonB,Your goods has arrived!Process finished with exit code 0
四. 结论
结果基本的实现了我们的目标, 注意不要用PersonB 来implement CallBack, 因为传一个接口把自己完全暴露给PersonA, 隐私都没了.这样可能会导致数据不安全.
阅读全文
0 0
- 回调(callback)机制
- CALLBACK机制:
- CallBack机制
- callback机制
- CallBack机制
- callback机制
- CallBack机制
- callback机制
- Callback机制_基础(1)
- Callback机制_实现(2)
- Java回调机制(CallBack)
- Java回调机制(callback)
- Java回调机制(CallBack)详解
- Android之---回调机制(CallBack)
- 回调(callback)
- 忆龙2009:BREW平台Callback(回调)机制的最终分析
- callback 实现机制
- callback机制二
- 3. 面向对象基本原理
- 文件 I/O字符流
- lua之table.sort使用
- Manifest.permission中 permission是红色的错误
- Java 继承
- 回调(callback)机制
- Activity的四种启动模式
- 修改Tomcat内存大小
- 《程序员的自我修养》读书笔记
- 文件 I/O缓冲流
- 组合数(dfs)
- [大数据入门-jQuery]Day17-jQuery对文档的操作
- maven仓库详解
- 了解java .lang 包,java.util包等常用包