回调监听机制详解

一、回调机制的理解


回调监听实例需求:领导需要员工帮忙做一件事情,做完以后告诉他。这件事情的执行,是需要消耗时间的,领导不能在这里等待着。所以需要,在事情执行完后给领导一个反馈。

在编码实现中,耗时操作则需要回调监听。

领导:需要一个做事的员工,安排任务,携带回传信息途径 ---- 员工,任务,回传途径;

员工:做事情,回传消息 ---- 需要:事情,回传;输出:事情结果。


领导:

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"
}*/



哈哈,别问我为什么,你告诉我好不好?我也不知道,这个结果是度量告诉我的,能用,我没来得及往下挖掘呢~~









你以为我贫穷低微,并不高大美丽,就没有灵魂,没有真爱吗?

                                                                                                     --------------《简•爱》
 弯道超车


  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

壹叁零壹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值