回调(callback)机制
2017-12-08 23:02
204 查看
一. 前言
回调(callBack)是使用频率非常高的一种编程技巧,它是2个对象间通信的一个手段.曾经看到知乎上一个比较浅显易懂的说法:你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。回答完毕。 (链接:https://www.zhihu.com/question/19801131)
二. 分析问题
现在写个小程序来实践下.分析下这个问题,可以看到:对象: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, 隐私都没了.这样可能会导致数据不安全.相关文章推荐
- 浅谈Android中的回调机制CallBack
- JAVA回调机制(CallBack)
- JAVA回调机制(CallBack)
- JAVA回调机制(CallBack)详解
- JAVA回调机制(CallBack)详解
- Java 回调机制(CallBack) 详解及实例代码
- Android中callback(接口回调)机制
- Java 回调机制(CallBack) 趣解
- JAVA回调机制(CallBack)
- JAVA回调机制(CallBack)
- JAVA回调机制(CallBack)详解
- Java回调机制(callback)
- Android之---回调机制(CallBack)
- Java回调机制(CallBack)详解
- Android 回调机制学习之 Callback
- JAVA回调机制(CallBack)
- JAVA回调机制(CallBack)详解
- openstack nova 基础知识——rpc回调机制(callback) 和rpc模块中的kombu
- 基于.NET 2.0的GIS开源项目SharpMap分析手记(十四):ASP.NET2.0实现无刷新客户端回调的Callback机制及例子代码下载
- JAVA回调机制(CallBack)