一、回调机制的理解
回调监听实例需求:领导需要员工帮忙做一件事情,做完以后告诉他。这件事情的执行,是需要消耗时间的,领导不能在这里等待着。所以需要,在事情执行完后给领导一个反馈。
在编码实现中,耗时操作则需要回调监听。
领导:需要一个做事的员工,安排任务,携带回传信息途径 ---- 员工,任务,回传途径;
员工:做事情,回传消息 ---- 需要:事情,回传;输出:事情结果。
领导:
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"
}*/
哈哈,别问我为什么,你告诉我好不好?我也不知道,这个结果是度量告诉我的,能用,我没来得及往下挖掘呢~~
你以为我贫穷低微,并不高大美丽,就没有灵魂,没有真爱吗?
--------------《简•爱》
弯道超车