回调监听机制详解
来源:互联网 发布:汉娜.穆雷 知乎 编辑:程序博客网 时间:2024/05/21 09:49
一、回调机制的理解
回调监听实例需求:领导需要员工帮忙做一件事情,做完以后告诉他。这件事情的执行,是需要消耗时间的,领导不能在这里等待着。所以需要,在事情执行完后给领导一个反馈。
在编码实现中,耗时操作则需要回调监听。
领导:需要一个做事的员工,安排任务,携带回传信息途径 ---- 员工,任务,回传途径;
员工:做事情,回传消息 ---- 需要:事情,回传;输出:事情结果。
领导:
public class Manager { /** * @param personal 传入一个员工类的对象 */ public Manager(Personal personal) { // 想让该让员工做什么 personal.doSomething(this, "整理公司文件"); } /** * @param result 事情结果 * @description 当员工做完总经理让他做的事后就通过该方法通知总经理 */ public void phoneCall(String result) { System.out.println("事情" + result); }}
public class Personal { public void doSomething(Manager manager, String task) { // 总经理通过doSomething方法告诉员工要做什么 System.out.println("总经理要你做" + task); String result = "做完了"; // 当事情做完了我们就通过总经理公布的phoneCall方法通知总经理结果 manager.phoneCall(result); }}
事情开始执行:
public class MyClass { public static void main(String[] args) { // 首先我们需要一个员工 Personal personal = new Personal(); // 其次把这个员工指派给总经理 new Manager(personal); }}
任务执行过程中,领导把自己“备份”跟着员工,在现实中是不可能出现的,最多给一个“手机”。在程序中,将领导备份也是相对较耗资源的。
现实很明显,一个员工不只是一个领导,很多领导需要这个员工做不同的事情,但是反馈内容大致相差不多。
二、回调机制的实现一
应用JAVA接口机制,先把汇报工作模式化下来。
public interface CallBackSameInfoInterface { /** * 返回信息结果 * * @param result */ public void sendBackInfo(String result);}
员工需要做不同领导派发的任务:信息回传都使用我们模式化的汇报形式。
public class Worker { /** * 做经理一安排的工作 * * @param manager1 * @param manager1Task */ public void doManager1Job(CallBackSameInfoInterface manager1, String manager1Task) { System.out.println("Worker" + manager1Task); manager1.sendBackInfo("经理一的工作做完了。"); } /** * 做经理二安排的工作 * * @param manager2 * @param manager2Task */ public void doManager2Job(CallBackSameInfoInterface manager2, String manager2Task) { System.out.println("Worker" + manager2Task); manager2.sendBackInfo("经理二的工作做完了。"); }}
领导一出来安排工作了:
public class Manager1 implements CallBackSameInfoInterface { public Manager1(Worker worker) { worker.doManager1Job(this, "经理一要咖啡!"); } @Override public void sendBackInfo(String result) { System.out.println(result + "咖啡很好喝!"); }}
领导二也出来安排工作了:
public class Manager2 implements CallBackSameInfoInterface { public Manager2(Worker worker) { worker.doManager2Job(this, "经理二要一杯茶!"); } @Override public void sendBackInfo(String result) { System.out.println(result + "茶很不错~"); }}
当前机制下,领导并没有把自己“备份”,而是将“手机号”给了员工,也同样实现了消息回调。
在现实中,领导安排了不同的任务,回馈的消息当然并不一致。诱发了新的变化与需求。
三、回调机制的实现二
消息回馈不同,则需要不同的回馈模型。而同一个任务执行只需要回馈自己任务的消息。接口的强制子类重写方法则需要变更一下。
准备消息回馈模型:
public class CallBackDifferentInfoInterface { /** * 返回信息结果 * * @param result */ public void sendBackInfo(boolean result) { } /** * 返回最终数量 * * @param result */ public void sendBackNumber(float result) { }}
吃苦受累的员工还是需要干活的。因为要回馈给不同的人,所以,给我电话号码的时候,就做好区分,可行?!
public class Worker { /** * 做经理一安排的工作 * * @param manager1 * @param manager1Task */ public void doManager1Job(CallBackDifferentInfoInterface manager1, String manager1Task) { System.out.println("Worker" + manager1Task); manager1.sendBackInfo(true); } /** * 做经理二安排的工作 * * @param manager2 * @param manager2Task */ public void doManager2Job(CallBackDifferentInfoInterface manager2, String manager2Task) { System.out.println("Worker" + manager2Task); manager2.sendBackNumber(4f); }}
很不幸的是,电话是一个工具,存入了所有的电话号码。还得员工自己决定回馈给哪个领导。不同结果给了错误领导是会发生不良事件的~~
领导一还是出来安排工作:
public class Manager1 extends CallBackDifferentInfoInterface { public Manager1(Worker worker) { worker.doManager1Job(this, "经理一要咖啡!"); } @Override public void sendBackInfo(boolean result) { if (result) { System.out.println("咖啡很好喝,谢谢~_~"); } else { System.out.println("你先忙,稍后帮我弄好就行,谢谢~_~"); } }}
结果是针对型回馈的,领导也就能依据结果再做决断,或者评判。
领导二也是不甘人后,需要员工帮点忙的:
public class Manager2 extends CallBackDifferentInfoInterface { public Manager2(Worker worker) { worker.doManager2Job(this, "经理二要你给一位员工评分!"); } @Override public void sendBackNumber(float result) { if (result > 5) { System.out.println("你对他印象还不错哦~_~"); } else { System.out.println("你和他多多沟通交流~_~"); } }}
我们的反馈一不小心表达了我们之间的关系,有时候也是需要长点心的吧~~
领导三是个比较随和的人,他安排任务,也给予一个全新视角:
public class Manager3 { public Manager3(Worker worker) { worker.doManager1Job(new CallBackDifferentInfoInterface() { @Override public void sendBackInfo(boolean result) { if (result) { System.out.println("全家团圆饭,谢谢你~_~"); } else { System.out.println("麻烦你辛苦下,再找找,谢谢~_~"); } } }, "经理三要你定一桌饭!"); worker.doManager2Job(new CallBackDifferentInfoInterface() { @Override public void sendBackNumber(float result) { if (result > 10) { System.out.println("看来最近市场缺肉有点严重~_~"); } else { System.out.println("价格行情还不错~_~"); } } }, "经理三要你确定鸡肉价格!"); }}
好吧,该干点事情了~_~
public class MyClass { public static void main(String[] args) { Worker worker = new Worker(); Manager1 manager1 = new Manager1(worker); Manager2 manager2 = new Manager2(worker); new Manager3(worker); }}
好吧,给领导办完事情,回调机制,我们能否理解多一点。
我们也可以把自己的事情拆分下,交给自己的下属帮忙打理下~~怎么拆分任务,又怎么合理应用回调机制呢?哎呀喂,思考思考,我这笨脑子又需要琢磨琢磨了~~
四、Android Studio下java编程
1,基本环境
新建项目,有了基本的承载;新建java lib 项目,搭建java的编辑运行环境。
2,使用
public class MyClass { public static void main(String[] args) { Worker worker = new Worker(); Manager1 manager1 = new Manager1(worker); Manager2 manager2 = new Manager2(worker); new Manager3(worker); }}
java程序主入口已经有了,类间的调用也有了。丰富更多类,java世界的大门再向我们敞开~~
3,注意事项
java运行环境中,控制台打印内容确是乱码,明明都是utf-8,WTF...
在java Module下修改build.gradle:
//新版tasks.withType(JavaCompile) { options.encoding = "UTF-8"}//旧版/*tasks.withType(Compile) { options.encoding = "UTF-8"}*/
哈哈,别问我为什么,你告诉我好不好?我也不知道,这个结果是度量告诉我的,能用,我没来得及往下挖掘呢~~
你以为我贫穷低微,并不高大美丽,就没有灵魂,没有真爱吗?
--------------《简•爱》
弯道超车
0 0
- 回调监听机制详解
- android事件监听回调机制
- android事件监听回调机制
- Android监听事件的回调机制
- android事件监听回调机制
- java监听机制的原理-回调机制
- 回调机制详解
- 回调机制详解
- 回调机制详解
- 回调机制详解
- 回调机制详解
- 回调机制详解
- 回调机制详解
- 回调机制详解
- 回调机制在 Android 监听用户界面操作中的体现
- 回调机制在 Android 监听用户界面操作中的体现
- 回调机制在 Android 监听用户界面操作中的体现
- 回调机制在 Android 监听用户界面操作中的体现
- linux 负载均衡 nginx反向代理 tomcat web服务器
- vmware workstation 12中CentOS7安装教程
- file_log
- 书摘《人人都是产品经理》——4年产品经理的思维书4
- file_plot
- 回调监听机制详解
- hdu 1196 lowbit裸题
- POJ 3977 Subset 已翻译
- Ubuntu官方安装说明
- ServletContext上下文对象
- MySQL命令记录(持续更新...)
- for/in 循环遍历对象的属性
- 排列 POJ - 1833
- Ubuntu14.04添加Navicat的快捷方式